\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}