==================================
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 ````.