#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Feb 24 08:51:58 2022 @author: antoine """ ################ ### UniSquat ### ################ """ Indique toutes les salles disponibles dans les différents départements de l'Université de Strasbourg. """ # Modules : import requests import icalendar # Variables générales : sched_filen = "schedule.ics" rooms_filen = "rooms.txt" # Récupération des salles : r_file = open(rooms_filen, "r") rooms = r_file.read().splitlines() r_file.close() # Fonctions : def sched_get(date) : """ Récupère l'emploi du temps de toutes les salles (pour le moment, juste de l'UFR) sur ADE depuis le site de l'Unistra. Parameters ---------- date : datetime.datetime() Date au format datetime. Returns ------- None. """ day = str(date.day) month = str(date.month) year = str(date.year) r = requests.get("https://adecons.unistra.fr/jsp/custom/modules/plannings/anonymous_cal.jsp?resources=30626&projectId=8&calType=ical&firstDate="+year+"-"+month+"-"+day+"&lastDate="+year+"-"+month+"-"+day) # Téléchargement au format iCal f = open(sched_filen, "wb") f.write(r.content) f.close() def used_rooms_get(datet) : """ Créé la liste des salles occupées à la date 'datet' d'après l'emploi du temps des salles. Parameters ---------- datet : datetime.datetime() Date au format datetime. Returns ------- used_rooms : list Liste des salles occupées. """ # Récupération des informations sur l'EDT téléchargé : cal_file = open(sched_filen, "rb") cal = icalendar.Calendar.from_ical(cal_file.read()) used_rooms = [] for comp in cal.walk(): if comp.name == "VEVENT" : ev_dstart = comp.decoded("dtstart") ev_dend = comp.decoded("dtend") if ev_dstart.timestamp() <= datet.timestamp() and ev_dend.timestamp() > datet.timestamp() : if comp.get("location") not in used_rooms : used_rooms.append(str(comp.get("location"))) cal_file.close() return used_rooms def available_rooms_get(used_rooms) : """ Créé la liste des salles disponibles d'après la liste des salles occupées 'used_rooms'. Parameters ---------- used_rooms : list Liste des salles occupées. Returns ------- available_rooms : list Liste des salles disponibles. """ available_rooms = [] for room in rooms : if room not in used_rooms : available_rooms.append(room) return available_rooms