CFR SA, das rumänische nationale Eisenbahninfrastrukturverwaltungsunternehmen, bietet einen Online-Live-Informationsdienst (basierend auf ASPX-Formularen mit Postback-Viewstate-Versand und Ereignisvalidierung) an, um nahezu in Echtzeit Daten über Abfahrten, Ankünfte und Bahnsteige, an denen Züge in Bahnhöfen ankommen, und Fahrtverzögerungen zu erhalten und Updates. Zu diesem Zeitpunkt fehlte dem gesamten System eine API oder sogar eine anständige, benutzerfreundliche und leicht zu findende Schnittstelle für Endbenutzer.
Diese Flask-basierte API extrahiert Daten aus der CFR-Webanwendung, wie im URL-API-Endpunkt angefordert, und gibt wiederverwendbare JSON-Daten aus. Das Programm kratzt alle seine Informationen aus der __VIEWSTATE-Variablen von ASP.Net.
Sie müssen Python 3.6+ und Pipenv auf Ihrem System installiert haben.
$ apt install python3 python3-pip $ pip3 Pipenv installieren
Klonen Sie das Repository und installieren Sie die Modulabhängigkeiten:
$ Git-Klon https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-scraper $pipenv install
Führen Sie den API-Server wie in der Flask-Dokumentation angegeben aus.
$pipenv run flask run
Für eine erfolgreiche Installation müssen Sie möglicherweise die Pipfile bearbeiten, damit sie mit Ihrer lokalen Python-Version übereinstimmt
python_version = "3.6.9"
Flask lauscht standardmäßig nur auf lokale Anfragen. Es ist ratsam, es so beizubehalten und für größere Bereitstellungen einen Reverse-Proxy zu installieren. Um jedoch über LAN auf Ihren Testcomputer zuzugreifen, führen Sie Folgendes aus:
$ pipenv run flask run --host 0.0.0.0
Dadurch werden alle verfügbaren Schnittstellen gebunden.
Jetzt können Sie Ihren Browser auf http://localhost:5000/station/ID verweisen, um die Magie zu sehen. ID ist der eindeutige Code der Stationseinheit; Eine Liste wird vom Endpunkt http://localhost:5000/get-stations/ bereitgestellt.
Um beispielsweise ein JSON-Objekt mit der aktuellen Abfahrts-/Ankunftstafel und Verspätungsinformationen für den Bukarester Nordbahnhof (den wichtigsten und größten in unserem Land) zu erhalten, würden Sie Ihren Browser oder die URL-Variable für die von Ihnen genutzte App angeben die Daten mit an: http://localhost:5000/station/10017.
Auf die gleiche Weise können Sie die aktuellen Züge in einem bestimmten Bahnhof abrufen und die aktuellen Informationen für einen bestimmten Zug abrufen. CFR stellt Informationen wie Verspätungen, den letzten Bahnhof, den der Zug passiert hat (mit 7 Minuten Verspätung), den nächsten Bahnhof und andere nützliche Informationen bereit.
Richten Sie Ihren Browser einfach auf http://localhost:5000/train/ID, wobei ID die eindeutige Nummer des Zuges ist. Sie können diese IDs dem Stationsinformations-Feed entnehmen. Beispielsweise können Sie die Informationen für den Zug IR 1651 von Bukarest Nord nach Suceava Nord (gültig ab April 2017) abrufen, indem Sie auf http://localhost:5000/train/1651 zugreifen.
In der API ist auch ein Web-Client enthalten. Gehen Sie zu http://localhost:5000/static/station.html, http://localhost:5000/static/train.html oder http://localhost:5000/static/train.html?tren=9351 (vordefinierter Zug). Nummer), um es zu sehen.
Während die offiziellen Apps selbst funktionieren, aber vielleicht nicht so gut aussehen, haben rumänische Entwickler ihr Bestes getan, um einige wirklich coole Open-Source-Projekte und Online-Dienste im Zusammenhang mit Transport und Infrastruktur zu erstellen. Sehen Sie sich diese Live-Karte, diesen proprietären GTFS-Konverter, diesen Reiseplaner usw. an.
Mithilfe dieser API und anderer öffentlicher Ressourcen können Sie Ihre eigene Art von Bahnhofsabfahrtstafel, Verspätungsbenachrichtigungsdienst und cool aussehender mobiler App erstellen und gleichzeitig lernen, wie man strukturierte Daten programmiert und damit arbeitet.
Dies ist ein vollständig Open-Source-Projekt, das auf Open-Source-Modulen und -Bibliotheken basiert und unter der Do What the Fuck You Want to Public License Version 2 lizenziert ist.
Außerdem tragen Sie die volle Verantwortung für das, was Sie damit machen – bedenken Sie, dass CFR SA und InfoFer (das der Staatsbahn gehörende IT-Unternehmen, das ihre Software entwickelt) nicht besonders transparent oder Drittentwicklerfreundlich sind. Wenn Sie Massen-Scraping betreiben oder einen öffentlich zugänglichen Dienst entwickeln, der aus verschiedenen Gründen eine Menge Datenverkehr vom selben Server zu ihnen generiert oder ihre Daten in eine Datenbank klont, könnten Sie in Schwierigkeiten geraten, wie es dieser Mitenthusiast bei der Erstellung eines Webs getan hat Reiseplaner mit dem Fahrplan von CFR Calatori auf deren Website.
Aber wenn Sie herumbasteln, herumspielen und mit Echtzeitdaten arbeiten, die offensichtlich niemanden verwirren können, wenn der Fehler nicht von CFR selbst stammt, sollten Sie damit einverstanden sein und sich auf der richtigen Seite des Gesetzes befinden, zumindest meiner Erfahrung nach. Vielleicht werden sie irgendwann ihre eigene API mit den richtigen Regeln und Lizenzen anbieten.
Anfragen werden nicht authentifiziert und es ist keine Ratenbegrenzung implementiert, sodass sie in keiner Weise für die Offenlegung im Internet bereit sind.
Das ist nicht besonders schnell, da die CFR-Webseite es auch nicht ist. Sie benötigen wahrscheinlich Hintergrundanfragen und Caching. Nachdem die erste Anfrage gestellt wurde, wird 8 Sekunden gewartet, bevor die Daten analysiert werden. Wenn auf der Webseite keine Daten angezeigt werden, wird noch weitere 20 Sekunden gewartet. Danach gibt die API ein leeres Objekt aus. Dies kann bedeuten, dass der gescrapte Webdienst nicht verfügbar ist, dass er sehr langsam reagiert oder dass wirklich keine aktuellen Fahrten an dieser bestimmten Station halten (z. B. nachts oder an einer kleinen Haltestelle). Beispiel). Behoben: Wenn die API ausgefallen ist, erhalten Sie den Fehlerstatus 5xx.
Dabei handelt es sich um Scraping und Parsing, sodass jede strukturelle Aktualisierung der CFR-Webseite, auch wenn es in naher Zukunft höchst unwahrscheinlich ist, dazu führen kann, dass dies zum Erliegen kommt.
Der Zuginformations-Feed enthält keine Details zu Zugverspätungen und andere nützliche Informationen, die Infofer mit seinem Dienst anbietet. Dies wird in Zukunft aktualisiert. Behoben: Alle öffentlichen IRIS-Informationen werden auf dieser API ausgegeben.
Öffentlicher Informations-Webdienst, bereitgestellt von CFR SA über Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx. Hierbei handelt es sich um Informationen der Infrastrukturverwaltung und nicht um einen bestimmten Personenbeförderer. Offizielle Passagierfahrpläne finden Sie hier: http://mersultrenurilor.infofer.ro und eine statische XML-Datenquelle mit Fahrplänen, die am Ende jedes Jahres aktualisiert werden: http://data.gov.ro/organization/sc-informatica-feroviara- sa