123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- \documentclass[a4paper, 8pt]{article}
- \usepackage[utf8]{inputenc}
- \usepackage[T1]{fontenc}
- \usepackage[francais, english]{babel}
- \usepackage[a4paper]{geometry}
- \geometry{hmargin=2.5cm,vmargin=1.5cm}
- \usepackage{amssymb, amsmath,amsfonts,amsthm,mathrsfs}
- \usepackage{hyperref}
- \sloppy
- \title{\vspace{-2cm}Rapport du projet de \emph{Web Data Management}}
- \author{Shendan Jin \& Olivier Marty}
- \date\today
- \begin{document}
- \maketitle
- \section{Présentation du projet}
- Le but de ce projet est d'utiliser différentes sources d'informations sur
- internet qui concernent l'état d'un moyen de transport (lignes de
- métro, de train, stations vélo vide ou pleine, ou encore un bouchon sur
- l'autoroute (non implémenté)) afin de prévenir l'utilisateur lorsque celui-ci va
- les utiliser.
- Pour cela on se connecte à son agenda (Google Calendar), et on analyse ses emails
- (Gmail) pour prévoir ses déplacements, mais d'autres sources pourrait être
- ajoutées, de façon modulaire.
- Pour chaque événement, on géolocalise l'adresse avec l'API d'OpenStreetMap,
- puis on cherche les moyens de transport utiles pour se rendre à ces coordonnées.
- En cas de problème sur l'un de ces moyens de transport, l'utilisateur est
- notifié par le medium de son choix (email, ou sms via l'API de free mobile).
- \section{Description globale}
- Le projet est divisé en trois principales composantes :
- \subsection{Les événements}
- Les événements auquel l'utilisateur va se rendre sont représentés par un objet
- contenant un identifiant unique, la date, l'addresse, et une description.
- Ces événements sont récupérés à partir de deux sources : Google Calendar et
- Gmail.
- Cependant les seuls mails aboutissant à la détection d'un événement sont ceux de la forme :\\
- "Rendez-vous\\
- le 22/02/2016 08h45\\
- à Université Paris Diderot\\
- pour le cours de WDM"
- \subsection{Les sources d'état du trafic}
- Une information concernant l'état d'un moyen de transport est représenté par un
- objet contenant un identifiant unique, un message, et un attribut booléen qui
- determine si le moyen de transport présente un problème.
- Les données proviennent de différentes sources :
- \begin{itemize}
- \item \textbf{État des lignes de la RATP} Les données sont récupérées en scrapant l'url
- \url{http://ratp.fr/meteo/}.
- En effet la ratp ne fournit aucune API publique dynamique (l'API statique
- \url{http://data.ratp.fr/explore/dataset/offre-transport-de-la-ratp-format-gtfs/}
- a
- cependant été utilisée pour obtenir la localisation des stations et les lignes
- les traversant).
- \item \textbf{État des lignes Transilien} Les données sont récupérées en scrapant l'url \url{http://www.transilien.com/info-trafic/temps-reel}.
- L'API SNCF (\url{https://ressources.data.sncf.com/explore/dataset/osm-mapping-idf/})
- est par contre utilisée pour determiner la postition des stations et les
- lignes les traversant.
- \item \textbf{Vélos en libre service JCDecaux} Les données sont récupérées via
- l'API vls de JCDecaux (voir \url{https://developer.jcdecaux.com/#/opendata/vls}).
- \end{itemize}
- \subsection{La boucle principale}
- Cette boucle articule les différents modules entre eux.
- Elle consomme les événements depuis les sources, qu'elle rafraichit toutes les
- $30$ secondes.
- Une demi-heure avant qu'un un événement arrive à échéance, on cherche la
- localisation de l'événement, puis on cherche les sources qui peuvent être utiles
- pour ce rendre à cet événement (stations proches).
- Le module source récolte alors l'état de ces sources, et une notification est
- envoyée pour chaque problème soulevé.
- \section{Programmes python}
- Afin d'éxecuter un programme, il faut lancer la commande
- \texttt{python3 fichier.py}.
- Il faudra peut-être installer les dépendances python :
- \texttt{pip3 install -r requirements.txt}
- \paragraph{main.py} C'est le programme principal. Lors du premier lancement,
- il demandera l'autorisation de se connecter aux API Google Calendar et Gmail.
- \paragraph{demo.py} Lance une démonstration qui ignore les événements mais donne les
- notifications à partir d'une adresse.
- \paragraph{find.py} Ce fichier fournit une aide
- pour trouver les identifiants utilisé en interne pour désigner une source.
- Il propose une recherche interactive dans les listes téléchargées depuis les
- différentes API.
- \paragraph{ratp\_preprocessing.py} Les données statiques fournies par la ratp
- n'était pas dans un format qui nous convenait, en plus de peser plus de 500Mo~!
- Ce fichier extrait de ces données la liste des stations, leurs localisations et
- les lignes les traversant.
- Le fichier final ne pèse que 500Ko.
- L'url où l'on peut trouver les données brut est indiqués en commentaire dans ce
- fichier.
- \paragraph{map.py} Génère un fichier cvs contenant la liste des identifiants
- associés à des coordonnées d'intérêt.
- Une visualisation de ces données est disponible à l'adresse
- \url{https://www.google.com/maps/d/edit?mid=z6ibLBE5MDrk.kudB9LIy9Cws&usp=sharing}
- \end{document}
|