================================== Format des emplois du temps Celcat ================================== Avant de pouvoir afficher les emplois du temps, il est nécessaire de parser les fichiers XML générés par Celcat. On a besoin de plusieurs informations concernant le cours : - son nom ; - son type ; - sa semaine et son jour ; - son début et sa fin ; - son commentaire ; - ses salles ; - ses groupes. Certaines de ces informations sont triviales à récupérer (comme son nom, son type, son commentaire…), mais d’autres (telles que son jour précis) est un peu plus délicat. Parser facilement le XML ======================== Pour récupérer les fichiers à distance, celcatsanitizer utilise la bibliothèque requests_, et se sert de BeautifulSoup4_ pour parser les fichiers XML. .. _BeautifulSoup4: https://www.crummy.com/software/BeautifulSoup/bs4/doc/ .. _requests: http://docs.python-requests.org/en/master/ Les semaines ============ La première chose à faire après avoir téléchargé le fichier est de récupérer la liste des semaines présentes. Les dates sont encodées d’une manière assez exotique : .. code:: xml Semaine 42, Semaine commençant le 16/10/2017 42 NNNNNNNNYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN lundi mardi mercredi jeudi vendredi Vous voyez donc la date de début, le numéro de semaine, et la mystérieuse valeur ````. Il s’agit d’un identifiant de semaine. La propriété ``id`` du ```` ne semble pas être nécessaire pour comprendre le reste du fichier. .. _ref-week-dict: On va donc créer un tableau des semaines en se servant des ```` comme clé, et le premier jour de la semaine comme valeur. Les cours ========= Voici un exemple de cours : .. code:: xml 1 07:45-09:45 COURS/TD 07:45 09:45 COURS/TD NNNNNNNNYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN EDINF3F1 - Algorithmique et programmation L2 Info s1 TDA4 1TP1-B08bis Les différents éléments sont : ================= ===================== ============================= Donnée indiquée Balise correspondante Plusieurs valeurs possibles ? ================= ===================== ============================= Nom du cours ```` Oui Groupes concernés ```` Oui Salles ```` Oui Type de cours ```` Non Heure de début ```` Non Heure de fin ```` Non Jour ```` Non Semaine ```` Non Remarque ```` Non ================= ===================== ============================= Quand une donnée peut prendre plusieurs valeurs à la fois, les différentes valeurs se trouvent dans des balises ````. celcatsanitizer traîte tous les groupes et toutes les salles, mais ne lis qu’un seul nom de cours. Dans l’exemple donné plus haut, il n’y a pas de champ remarque. Pour trouver le jours du cours, on prend la semaine référencée par la balise ````, on retrouve le début de la semaine correspondante à l’aide du :ref:`dictionnaire des semaines `, et on ajoute autant de jours qu’indiqué par la balise ````.