Titre: JSTchouTchou Auteur: Bruno Date: Sat 30 Nov 2013 01:10:04 +0100 Lien: https://blog.spyou.org/wordpress-mu/2013/11/30/jstchoutchou/ URL de téléchargement de Podcast: http://www.raildar.fr/videos/2013-12-12.mp4 [image 2][2]Les activités professionnelles et associatives m’empêchent de continuer à alimenter ce blog de manière régulière, mais ça reviendra bien un jour, la preuve, une lubie m’a pris le weekend dernier à propos de l’opendata. Suite à un article de l’ami Hervé sur abavala.com[3] ou il expliquait avoir parsé les résultats des sites d’info de la SNCF avec une page Google, je me suis dit que c’était bien faisable en direct sans passer par nos amis américains. Du coup j’ai dégainé mon plus beau vim et j’ai pissé du perl. Et de fil en aiguille, j’en suis arrivé à une carte dynamique de la circulation prenant en compte les retards annoncés par la SNCF en (presque) temps réel. Vous pouvez jouer un peu avec l’outil ici[4]. Vous le remarquerez rapidement, en dehors de la proximité immédiate des gares, les trains ne circulent pas sur les voies quand la position indiquée sur l’infobulle est marquée « extrapolée » : la problématique est de savoir comment les positionner précisément sur les voies sans avoir de GPS embarqué. Du coup, j’ai pondu aussi pas mal de javascript pour pouvoir associer un trajet en train avec la géolocalisation d’un mobile. Tout le monde peut participer, il suffit de cliquer sur « play » et de sélectionner sa gare et son train avant de monter dedans. Vous me direz que les voies sont déjà bien documentées, oui, mais aucun de ces descriptifs ne fait le lien avec les trains eux-même, du coup, pas facile de savoir pas ou passent les trains entre deux gares. Histoire de ne pas saturer infolignes et me faire virer comme un malpropre, je n’ai pas inclus la totalité des missions nationales dans mes scripts, mais vous pouvez me demander l’ajout d’un train ou d’une ligne entière sans trop de soucis. Je tâcherais de faire en sorte que vous puissiez ajouter de nouveaux numéros de circulation en live bientôt. Il y a quelques bugs : * Une partie des échanges avec l’appli se fait via des popups, désactivés par défaut dans le navigateur standard sur android * La géolocalisation sur autre chose qu’un android ou un iOS a parfois du mal à passer comme il faut * Certaines gares ne sont pas bien positionnées * Il n’y a pas de bouton pour fermer les popups, il faut cliquer dans la partie grisée de l’interface J’ai ajouté un système de discussion sommaire (« chat » en haut à droite) Mise à jour du 5 décembre 2013 Pas mal de modification dans l’appli depuis une semaine. En vrac : * Changement du système d’approvisionnement : je me basais sur une liste de numéro de circulation des trains faite à la mimine, plutôt fastidieux, puis j’allais demander pour chaque trains, sur infolignes, s’il circulait ou pas le jour J. En épluchant le portail opendata de la SNCF je suis tombé sur l’API « micro-service » permettant de récolter une quantité colossale d’information théoriques sur les trains. Du coup, j’alimente maintenant ma base chaque nuit pour le lendemain avec la totalité des TER et Intercités circulant dans un nombre de gares données. Je parse ensuite le site infolignes pour chaque train autour de son heure théorique de circulation pour déterminer s’il est en retard ou pas. Je n’ai pas encore mis toutes les gares de france mais ça viendra bien, vu que l’application se comporte globalement assez bien avec la charge (2200 trains quotidiens au moment ou j’écris ces lignes) * Passage de la génération du listing de trains en circulation sur un fichier statique généré toutes les 10 secondes. Il était fait à la volée avant, c’était gérable pour une cinquantaine de trains et 2 ou 3 visiteurs mais pas plus. * Délégation des missions de téléchargement du fichier XML et d’upload des coordonnées GPS à des worker web permettant de s’assurer que le bout de code javascript principal se concentre sur le relevé de position GPS pour éviter d’avoir des trajets discontinu. * Changement de la méthode de gestion des trains sur la carte : je vidais entièrement la carte et repositionnait de nouveau les trains. Maintenant, les nouveaux sont ajoutés 15 minutes avant le départ à leur gare d’origine, puis se déplacent sans recréation et disparaissent à leur gare d’arrivée. * Je me suis pris un p’tit nom de domaine histoire de pas me prendre un procès pour utilisation non autorisée de la marque SNCF dans l’URL. * Modification du comportement : lorsqu’on clique sur « Play » on ne voit plus que le train dans lequel on est et sa propre position. C’est d’une part pour donner un peu d’animation toute seule, d’autre part pour décharger les smartphone du traitement de l’ensemble des trains pendant qu’ils s’occupent de faire des relevés GPS Côté possibilités offertes, deux appels XML qui peuvent vous intéresser (méthodes obsolètes. Voir le wiki du projet[5]): * http://www.raildar.fr/xml/map_generic qui vous retourne l’ensemble des trains en circulation actuellement avec leur coordonnées GPS * http://www.raildar.fr/xml/gares qui vous renvoi l’ensemble des gares que j’ai en base avec les coordonnées et la possibilité de restreindre la selection en ajoutant ?name=nom_exact ou bien ?search=nom_partiel Je prépare quelques autres API pour accéder facilement au reste des infos. Stay tuned ! :) Je profite de cette mise à jour pour vous rappeler que le gros intérêt de la chose est aussi de documenter les segment ferroviaires utilisés par notre amie SNCF en effectuant des relevés GPS pour placer les trains très précisément sur la carte. Il suffit, pour ça : * de vérifier que votre ligne est couverte par raildar.fr en observant la carte, et de me demander si ce n’est pas le cas * au moment de monter dans le train, d’autoriser le site à vous géolocaliser et d’activer le GPS dans votre smartphone * de cliquer sur « play » en haut à gauche, de sélectionner votre gare puis votre train * de profiter du paysage en laissant votre smartphone allumé et sur le site * d’avoir une batterie bien pleine ou une alimentation externe si vous avez un long trajet * de me jeter un petit mail une fois arrivé, que j’aille voir ce que donne votre trace GPS pour la valider * vous pouvez aussi utiliser votre soft GPS favori et m’envoyer une trace au format GPX Si vous êtes développeur iphone ou android et que porter raildar.fr sur ces plateformes vous botte, faites moi signe ! :) Mise à jour du 9 décembre 2013 Encore quelques bricoles : * Quelques correction de bug sur le point indiquant votre position * Stockage de l’altitude, de la vitesse et de la direction lors de l’acquisition GPS si le terminal le supporte * Une carte des gares en base, avec les coordonnées corrigées par mes soins et ceux de madame (oui, la base « opendata » de gares SNCF a des coordonnées moisies pour pas loin de 80 gares, ou alors n’utilise pas les référentiels communs). Visible ici[6]. * Une carte des traces GPS validée en base. Visible ici[7]. (attention, il vaut mieux avoir un CPU bien accroché) * Un petit service web pour vous permettre d’entrer vos gares préférées et d’avoir tout de suite l’info sur les prochains trains et leurs retards. C’est ici[8]. C’est surtout fait pour les mobiles. Le navigateur garde une ID unique permettant de retrouver les gares, donc si vous changez d’ordinateur ou de smartphone, il faut les réindiquer. Mise à jour du 13 décembre 2013 Je continue doucement, en explorant pas mal de pistes : * J’ai joué un peu avec phantomJS, un outil qui permet en gros de créer un navigateur virtuel et prendre des screenshot de site web de façon automatique et ultra simple. Je doutais très fortement qu’il sache gérer la cohorte de javascript de raildar, mais il se démerde très bien, et du coup, chaque soir, une vidéo de la journée est dispo dans http://www.raildar.fr/videos/date-du-jour.mp4, par exemple, pour la grève d’hier, http://www.raildar.fr/videos/2013-12-12.mp4[9] * Un illuminé comme moi a démarré le développement d’une appli android qui se base sur mes API pour faire en gros la même chose que le site web. Longue vie ! * J’ai commencé à réécrire l’ensemble du code server-side pour utiliser le framework Mojolicious et, enfin, développer comme les djeunz avec un fw, un dépôt git et compagnie. * J’ai entamé aussi un widget permettant de selectionner la visualisation partielle des trains (genre tous les supprimés, tous les en retard, …) et je vais profiter de la réécriture pour ne charger que les trains correspondant au zoom utilisé sur le navigateur de l’utilisateur et activer les fonctions de tracking d’un train en dehors du mode « play » * Toujours au chapitre réecriture, c’est aussi l’occasion de rendre l’engin modulaire pour y brancher de nouvelles sources de données. L’équipe opendata de Toulouse m’a fourni une clé d’API pour le réseau Tisséo, ce sera donc le premier a gouter du raildar après la SNCF * Last but not least, la waybackmachine est utilisable, par exemple avec http://www.raildar.fr/?date=1386867785[10]. Le premier chargement d’un timestamp est un peu long, mais après, ça va tout seul. Notez que je dis wayback, mais ça marche aussi dans le futur, pour l’instant uniquement avec le lendemain. Pour bouger dans le temps, entrer un nouveau timestamp dans l’URL ou bien cliquez sur les boutons « +2 / -2″ sur le coté. Si à cette occasion vous trouvez des trains qui bougent trop vite pour être réels, vous avez probablement trouvé une gare mal placée, je suis preneur du numéro du train et du timestamp utilisé. Bon weekend les enfants ! Mise à jour du 16 décembre 2013 J’ai passé un bon bout du weekend à recoder les fonctions principales de raildar pour utiliser un joli framework perl (Mojolicious) et me simplifier la vie et les développements futurs. Rien de changé coté interface utilisateur, mais un code plus light et plus rapide coté serveur. Du coup, j’ai changé la moulinette d’acquisition des trains pour tous les récupérer, d’ou une nette augmentation du peuplement de la carte. Au chapitre nouveautés également : * Un graph du trafic dispo ici[11] et en bas à droite de l’interface avec un joli bug de positionnement du popup * Une API pour trouver des gares en fonction de la latitude et de la longitude d’un point donné : http://www.raildar.fr/xml/gares?lat=45.888&lng=4.8041&dist=20&limit=10 (avec latitude, longitude, distance max depuis ce point et nombre d’éléments retournés) * Une déclinaison de cette même API qui permet d’avoir toutes les gares (si on ne spécifie aucun argument) et les gares contenant une chaîne avec ?search=chaine * Une API pour trouver les prochains trains dans une gare donnée : http://www.raildar.fr/xml/next_missions?id_gare=1747&time_dist=450 (avec id_gare retourné par l’API précédente et time_dist le nombre de minutes) * Une API pour avoir le détail d’un train : http://www.raildar.fr/xml/get_mission?id_mission=40926 (avec id_mission retourné par l’API précédente) Have fnu ! Mise à jour du 21 décembre 2013 Quelqu’un m’a envoyé une belle trace GPS d’un parcours de TGV mais je ne gérais pas les TGV. Qu’à cela ne tienne, je me suis creusé un peu la tête. La problématique pour les TGV est de connaitre les numéros de trains. Contrairement aux TER & Intercités, on ne les trouve pas dans les API opendata SNCF. J’ai pris le parti de me baser sur ce qu’annonce le site Gares-En-Mouvement, soit le tableau des prochains trains dans chaque gares J’ai donc écris un nouveau parser qui vire les TER, Car et autres idioties de ces tableaux et ne garde que ce qui m’intéresse, c’est à dire tout le reste : TGV, idTGV, Lyria, Thalys, Eurostar, etc. Je vais laisser tourner cette moulinette une petite semaine le temps de récupérer tous les numéros de trains. Ensuite, je retourne voir mon copain infoligne avec ces numéros pour lui demander si le train est prévu en circulation demain, et le reste suit le même parcours technique que pour les autres trains. Reste un tout petit bémol : infolignes ne donne pas les infos sur les circulation des Eurostar. Si quelqu’un a une source, je suis preneur :) Bon weekend et noyeux zoël ! Raildar, la suite Je ne peux plus continuer à mettre des updates ici. Vous êtes donc cordialement invités à vous rendre sur le wiki du projet[12] si vous voulez suivre ! :) Liens: [1]: http://blog.spyou.org/wordpress-mu/files/2013/11/20131129_213814-e1385769933774.jpg (lien) [2]: http://blog.spyou.org/wordpress-mu/files/2013/11/20131129_213814-e1385769933774-300x225.jpg (image) [3]: http://www.abavala.com/ (lien) [4]: http://www.raildar.fr/ (lien) [5]: http://wiki.raildar.fr/index.php/API (lien) [6]: http://www.raildar.fr/static/show_gares.html (lien) [7]: http://www.raildar.fr/static/show_paths.html (lien) [8]: http://www.raildar.fr/me/ (lien) [9]: http://www.raildar.fr/videos/2013-12-12.mp4 (lien) [10]: http://www.raildar.fr/?date=1386867785 (lien) [11]: http://www.raildar.fr/tools/rrd_circulation (lien) [12]: http://wiki.raildar.fr/ (lien)