CFR SA, la société nationale roumaine d'administration de l'infrastructure ferroviaire, propose un service d'information en ligne en direct (basé sur des formulaires ASPX avec envoi de l'état de visualisation et validation des événements) pour obtenir des données en temps quasi réel sur les départs, les arrivées et les quais où les trains arrivent dans les gares et les retards de trajet. et mises à jour. À l’époque, tout ce système manque d’une API ou même d’une interface décente, facile à utiliser et facile à trouver pour les utilisateurs finaux.
Cette API basée sur Flask extrait les données de l'application Web CFR comme demandé dans le point de terminaison de l'API URL et génère des données JSON réutilisables. Le programme récupère toutes ses informations de la variable __VIEWSTATE d'ASP.Net.
Vous avez besoin de Python 3.6+ et Pipenv installés sur votre système.
$ apte à installer python3 python3-pip $ pip3 installer pipenv
Clonez le référentiel et installez les dépendances du module :
$ git clone https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-grattoir $ pipenv installer
Exécutez le serveur API comme spécifié dans la documentation Flask.
$ pipenv exécuter le flacon
Vous devrez peut-être modifier le fichier Pipfile pour qu'il corresponde à votre version locale de Python afin de réussir l'installation.
python_version = "3.6.9"
Flask écoute par défaut uniquement les requêtes locales. Il est conseillé de le conserver ainsi et d'installer un proxy inverse pour les déploiements plus importants, mais pour accéder à votre machine de test depuis le LAN, exécutez avec :
$ pipenv exécuter flask exécuter --host 0.0.0.0
Cela se liera à toutes les interfaces disponibles.
Vous pouvez maintenant pointer votre navigateur vers http://localhost:5000/station/ID pour voir la magie. L'ID est le code unique de l'unité de station ; une liste est fournie par le point de terminaison http://localhost:5000/get-stations/.
Par exemple, pour obtenir un objet JSON avec le tableau de départ/arrivée actuel et les informations sur les retards pour la gare de Bucarest Nord (la principale et la plus grande de notre pays), vous devez pointer votre navigateur ou la variable URL vers l'application que vous utilisez. les données avec : http://localhost:5000/station/10017.
De la même manière que vous pouvez obtenir les trains actuels dans une certaine gare, vous pouvez obtenir les informations actuelles pour un certain train. CFR fournit des informations telles que les retards, la dernière gare traversée par le train (avec un retard de 7 minutes), la gare suivante et d'autres informations utiles.
Pointez simplement votre navigateur sur http://localhost:5000/train/ID, où ID est le numéro unique du train. Vous pouvez obtenir ces identifiants à partir du flux d’informations de la station. Par exemple, vous pouvez récupérer les informations sur le train IR 1651 de Bucarest Nord à Suceava Nord (valable à partir d'avril 2017) en accédant à http://localhost:5000/train/1651.
Un client Web est également inclus avec l'API. Rendez-vous sur http://localhost:5000/static/station.html, http://localhost:5000/static/train.html ou http://localhost:5000/static/train.html?tren=9351 (train prédéfini numéro) pour le voir.
Même si les applications officielles elles-mêmes fonctionnent mais ne sont peut-être pas aussi belles, les développeurs roumains ont fait de leur mieux pour créer des projets open source et des services en ligne vraiment sympas liés aux transports et aux infrastructures. Voir cette carte en direct, ce convertisseur propriétaire vers GTFS, ce planificateur de voyage, etc.
En utilisant cette API et d'autres ressources publiques, vous pouvez créer votre propre style de tableau de départ de gare, de service de notification de retard, d'application mobile au look sympa, tout en apprenant à programmer et à travailler avec des données structurées ?
Il s'agit d'un projet entièrement open source, construit sur des modules et des bibliothèques open source et sous licence Do What the Fuck You Want to Public License Version 2.
De plus, vous êtes entièrement responsable de ce que vous en faites - gardez à l'esprit que CFR SA et InfoFer (la société informatique appartenant aux chemins de fer de l'État qui construit leurs logiciels) ne sont pas particulièrement transparentes ni adaptées aux développeurs tiers. Si vous effectuez du scraping de masse ou développez un service accessible au public qui génère beaucoup de trafic depuis le même serveur vers eux ou clone leurs données dans une base de données pour diverses raisons, vous risquez de rencontrer des problèmes, comme l'a fait ce collègue passionné en créant un site Web. planificateur de voyage en utilisant les horaires de CFR Calatori sur leur site Web.
Mais pour bricoler, jouer et travailler avec des données en temps réel qui ne peuvent clairement dérouter personne si l'erreur ne vient pas du CFR lui-même, tout devrait aller bien et du bon côté de la loi, du moins d'après mon expérience. Peut-être qu'ils proposeront leur propre API avec des règles et des licences appropriées à un moment donné.
Les requêtes ne sont pas authentifiées et aucune limitation de débit n'est mise en œuvre, elle n'est donc en aucun cas prête à être exposée sur le Web.
Ce n'est pas particulièrement rapide, car la page Web du CFR ne l'est pas non plus. Vous souhaiterez probablement des requêtes en arrière-plan et une mise en cache. Une fois la requête initiale effectuée, il attendra 8 secondes avant d'analyser les données. Si les données n'ont pas été affichées sur la page Web, elle attendra 20 secondes supplémentaires. Après cela, l'API affichera un objet vide - cela peut signifier que le service Web récupéré est en panne, qu'il est très lent à répondre ou qu'il n'y a vraiment aucun trajet en cours s'arrêtant à cette station particulière (la nuit ou à un petit arrêt, par exemple). exemple). Corrigé : si l'API est en panne, vous obtiendrez un statut d'erreur 5xx.
Il s'agit d'un scraping et d'une analyse, donc toute mise à jour structurelle de la page Web du CFR, bien que hautement improbable dans un avenir proche, pourrait briser ce problème.
Le flux d'informations sur les trains ne fournit pas les détails concernant les retards du train et d'autres informations utiles proposées par Infofer avec son service. Ceci sera mis à jour à l’avenir. Corrigé : toutes les informations publiques IRIS sont affichées sur cette API.
Service Web d'information publique fourni par CFR SA via Informatica Feroviara : http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx. Il s'agit d'informations provenant de l'administration de l'infrastructure et non d'un transporteur de passagers spécifique. Les horaires officiels des passagers se trouvent ici : http://mersultrenurilor.infofer.ro, et une source de données XML statique avec des horaires mis à jour à la fin de chaque année : http://data.gov.ro/organization/sc-informatica-feroviara- sa