UniSquat_Python/rooms_get.py

134 lines
3.0 KiB
Python
Raw Normal View History

#!/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
-------
2022-02-24 18:46:53 +01:00
Le texte du résultat de la requête.
"""
2022-02-24 18:46:53 +01:00
day = str(date.day)
month = str(date.month)
year = str(date.year)
2022-02-24 18:46:53 +01:00
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)
2022-02-24 18:46:53 +01:00
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
2022-02-24 18:46:53 +01:00
Liste des salles occupées. total_rooms : list
Toutes les salles mentionnées dans le fichier
"""
2022-02-24 18:46:53 +01:00
# Récupération des informations sur l'EDT téléchargé :
2022-02-24 18:46:53 +01:00
cal = icalendar.Calendar.from_ical(sched_get(datet))
used_rooms = []
2022-02-24 18:46:53 +01:00
total_rooms = []
for comp in cal.walk():
if comp.name == "VEVENT" :
ev_dstart = comp.decoded("dtstart")
ev_dend = comp.decoded("dtend")
2022-02-24 18:46:53 +01:00
roomname = str(comp.get("location"))
if not roomname in total_rooms:
2022-02-24 18:53:50 +01:00
total_rooms.append(roomname)
if ev_dstart.timestamp() <= datet.timestamp() and ev_dend.timestamp() > datet.timestamp() :
2022-02-24 18:46:53 +01:00
if not roomname in used_rooms :
used_rooms.append(roomname)
2022-02-24 18:46:53 +01:00
return total_rooms, used_rooms
2022-02-24 18:46:53 +01:00
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.
2022-02-24 18:46:53 +01:00
total_rooms : list
Liste de toute les salles
Returns
-------
available_rooms : list
Liste des salles disponibles.
"""
2022-02-24 18:46:53 +01:00
available_rooms = []
2022-02-24 18:46:53 +01:00
for room in total_rooms :
if room not in used_rooms :
available_rooms.append(room)
2022-02-24 18:46:53 +01:00
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