rapport.tex 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. \documentclass[a4paper, 8pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage[francais, english]{babel}
  5. \usepackage[a4paper]{geometry}
  6. \geometry{hmargin=2.5cm,vmargin=1.5cm}
  7. \usepackage{amssymb, amsmath,amsfonts,amsthm,mathrsfs}
  8. \usepackage{hyperref}
  9. \sloppy
  10. \title{\vspace{-2cm}Rapport du projet de \emph{Web Data Management}}
  11. \author{Shendan Jin \& Olivier Marty}
  12. \date\today
  13. \begin{document}
  14. \maketitle
  15. \section{Présentation du projet}
  16. Le but de ce projet est d'utiliser différentes sources d'informations sur
  17. internet qui concernent l'état d'un moyen de transport (lignes de
  18. métro, de train, stations vélo vide ou pleine, ou encore un bouchon sur
  19. l'autoroute (non implémenté)) afin de prévenir l'utilisateur lorsque celui-ci va
  20. les utiliser.
  21. Pour cela on se connecte à son agenda (Google Calendar), et on analyse ses emails
  22. (Gmail) pour prévoir ses déplacements, mais d'autres sources pourrait être
  23. ajoutées, de façon modulaire.
  24. Pour chaque événement, on géolocalise l'adresse avec l'API d'OpenStreetMap,
  25. puis on cherche les moyens de transport utiles pour ce rendre à ces coordonnées~:
  26. lignes passant par une station proche, stations de vélos proches...
  27. En cas de problème sur l'un de ces moyens de transport, l'utilisateur est
  28. notifié par le medium de son choix (email, ou sms via l'API de free mobile).
  29. \section{Description globale}
  30. Le projet est divisé en trois principales composantes :
  31. \subsection{Les événements}
  32. Les événements auquel l'utilisateur va se rendre sont représentés par un objet
  33. contenant un identifiant unique, la date, l'addresse, et une description.
  34. Ces événements sont récupérés à partir de deux sources : Google Calendar et
  35. Gmail.
  36. Cependant les seuls mails aboutissant à la détection d'un événement sont ceux de la forme :\\
  37. "Rendez-vous\\
  38. le 22/02/2016 08h45\\
  39. à Université Paris Diderot\\
  40. pour le cours de WDM"
  41. \subsection{Les sources de trafic}
  42. Une information concernant l'état d'un moyen de transport est représenté par un
  43. objet contenant un identifiant unique, un message, et un attribut booléen qui
  44. determine si le moyen de transport présente un problème.
  45. Les données proviennent de différentes sources :
  46. \begin{itemize}
  47. \item \textbf{État des lignes de la RATP} Les données sont récupérées en scrapant l'url
  48. \url{http://ratp.fr/meteo/}.
  49. En effet la ratp ne fournit aucune API publique dynamique (l'API statique a
  50. cependant été utilisée pour obtenir la localisation des stations et les lignes
  51. les traversant).
  52. \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}.
  53. La SNCF fournit une API pour chercher des itinéraires, ou avoir les prochains
  54. horaires, mais pas, à notre connaissance, pour avoir des informations de trafic.
  55. \item \textbf{Vélos en libre service jcdecaux} Les données sont récupérées via
  56. l'API jcdecaux\_vls (voir \url{https://developer.jcdecaux.com/#/opendata/vls}).
  57. \end{itemize}
  58. \subsection{La boucle principale}
  59. Cette boucle articule les différents modules entre eux.
  60. Elle consomme les événements depuis les sources, qu'elle rafraichit toutes les
  61. $30$ secondes.
  62. Une demi-heure avant qu'un un événement arrive à échéance, on cherche la
  63. localisation de l'événement, puis on cherche les sources qui peuvent être utiles
  64. pour ce rendre à cet événement (stations proches).
  65. Le module source récolte alors l'état de ces sources, et une notification est
  66. envoyée pour chaque problème soulevé.
  67. \section{Programmes python}
  68. Afin d'éxecuter un programme, il faut lancer la commande
  69. \texttt{python3 fichier.py}.
  70. Il faudra peut-être installer les dépendances python :
  71. \texttt{pip3 install -r requirements.txt}
  72. \paragraph{main.py} C'est le programme principal. Lors du premier lancement,
  73. il demandera l'autorisation de se connecter aux API Google Calendar et Gmail.
  74. \paragraph{demo.py} Lance une démonstration qui ignore les événements mais donne les
  75. notifications à partir d'une adresse.
  76. \paragraph{find.py} Ce fichier fournit une aide
  77. pour trouver les identifiants utilisé en interne pour désigner une source.
  78. Il propose une recherche interactive dans les listes téléchargées depuis les
  79. différentes API.
  80. \paragraph{ratp\_preprocessing.py} Les données statiques fournies par la ratp
  81. n'était pas dans un format qui nous convenait, en plus de peser plus de 500Mo~!
  82. Ce fichier extrait de ces données la liste des stations et les lignes les
  83. traversant, le fichier final ne pesant que 500Ko.
  84. L'url ou l'on peut trouver les données brut est indiqué en
  85. commentaire dans ce fichier.
  86. \end{document}