#!/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 : rooms_filen = "rooms.txt" # 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 ------- Le texte du résultat de la requête. """ 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) print(r.content) return r.content 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. total_rooms : list Toutes les salles mentionnées dans le fichier """ # Récupération des informations sur l'EDT téléchargé : cal = icalendar.Calendar.from_ical(sched_get(datet)) used_rooms = [] total_rooms = [] for comp in cal.walk(): if comp.name == "VEVENT" : ev_dstart = comp.decoded("dtstart") ev_dend = comp.decoded("dtend") roomname = str(comp.get("location")) if not roomname in total_rooms: total_rooms.append(roomname) if ev_dstart.timestamp() <= datet.timestamp() and ev_dend.timestamp() > datet.timestamp() : if not roomname in used_rooms : used_rooms.append(roomname) return total_rooms, used_rooms def available_rooms_get(total_rooms, 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. total_rooms : list Liste de toute les salles Returns ------- available_rooms : list Liste des salles disponibles. """ available_rooms = [] for room in total_rooms : if room not in used_rooms : available_rooms.append(room) return available_rooms def free_at(datet): """ Retourne la liste des salles dispo à cette date Parameters ---------- datet: datetime.Date La date à laquelle se fixer Returns ------- available_rooms : list Liste des salles disponibles. """ total,used = used_rooms_get(datet) free = available_rooms_get(total,used) return free