124 lines
2.6 KiB
Python
124 lines
2.6 KiB
Python
|
#!/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
|