Ich will den Fahrplan der Bahn mittels Python abfrage und auswerten. Theoretisch wäre das mit der Libray "schiene" ziemlich einfach:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
Praktisch geht es aber nicht. Kennt jemand da eine Möglichkeit?
|
Anzeige
|
python Bahnfahrplan abfragenIch will den Fahrplan der Bahn mittels Python abfrage und auswerten. Theoretisch wäre das mit der Libray "schiene" ziemlich einfach:
Praktisch geht es aber nicht. Kennt jemand da eine Möglichkeit? :
Bearbeitet durch User
Danke, die API funktioniert. Sie scheint aber wesentlich komplizierter als die ursprüngliche "schiene" Library. Hier das gerade probierte Beispiel für die Verbindung von Stuttgart nach München:
Die Anzahl der Anfragen scheint auch begrenzt zu sein. Ich habe das jetzt vielleicht 10x hintereinander gemacht und dann kommt: Netzwerkfehler: HTTPSConnectionPool(host='v6.db.transport.rest', port=443): Read timed out. (read timeout=10)
Doku: API status .. Also, the new underlying APIs seem to have a much lower rate limit than the old HAFAS API. ⚠️ .... No API Key You can just use the API without authentication. There's a rate limit of 100 requests/minute set up.
Die "schiene"-Library [1] ist offenbar seit einiger Zeit nicht mehr gepflegt worden. Der letzte Commit ist zwar erst neun Monate her, hat aber lediglich den Sponsor "focsec" zur README.md und dessen Banner-PNG hinzugefügt. Ein weiterer Blick in den Quellcode der Library zeigt, daß dort nicht die Bahn-API, sondern Web Scraping mit BeautifulSoup verwendet wird. Klar, das kann man natürlich machen, aber sobald der Betreiber einer solchen Website seinen HTML-Code ändert, funktioniert die Datenextraktion oft nicht mehr.
Dann schreib' Dir halt was zur Vereinfachung; die APIs der Bahn sind aber ein bisschen... sagen wir, unhandlich. Aber wenn Du eine langfristig benutzbare Software entwickeln willst, wirst Du um deren APIs kaum herum kommen.
Und auch die werden alle paar Jahre geändert werden. Erschreckend fand ich auf den ersten Blick: https://developers.deutschebahn.com/db-api-marketplace/apis/product/ris-disruptions-transporteure RIS::Disruptions (DB Transporteure) 1.0.292 Störungsinformationen für DB Fernverkehr AG & DB Regio AG Führt da die Abfrage "alle" nicht sofort zu DDOS-Alarm? :
Bearbeitet durch User
Wow, man merkt: da spricht der "Fachmann". Äh, nicht. Denn die benutzen diese APIs für ihre eigenen Informationssysteme und für externe Partner, die sie bei Änderungen alle gleichzeitig updaten müßten, um nichts kaputt zu machen. Darum sind die APIs natürlich versioniert, so daß veraltete Versionen der APIS auch dann weiterhin funktionieren, wenn es neue gibt. So macht man das nämlich, und die OpenAPI-Angebote der Bahn sind unhandlich, lassen aber erkennen, daß sich dort jemand viele Gedanken über Themen wie Langzeitstabilität gemacht hat. Aber jetzt, lieber Matthias, habe ich eine Frage an Dich. Nämlich: wie kommt man dazu, was zu einem Thema zu sagen, von dem man ganz offensichtlich keine Ahnung und das man sich auch keinen Sekundenbruchteil lang angesehen hat?
Die Versionierung ist aber scheisse umgesetzt. Versionsnummer in den Hostnamen ist ein nogo, technisch ist das nicht mal mehr RESTful. :
Bearbeitet durch User
Möglicherweise wird es deshalb auch nicht über den Hostname gemacht. In den JSON-Docs wird ein einheitlicher Hostname ohne Versionsnummer angegeben. Die Versionsnummern stehen im Pfad, wie bei anderen REST-Apis.
Wenn du von Mannheim nach Stuttgart willst, solltest du nicht nach Verbindungen von Berlin nach Hannover suchen ;-)
PEP8: Comments that contradict the code are worse than no comments. Always make a priority of keeping the comments up-to-date when the code changes!
Noch besser: gar keine Kommentare und der Code muss so lesbar wie ein Buch sein. Reference: "weniger schlecht programmieren" https://www.oreilly.com/library/view/weniger-schlecht-programmieren/9783955615697/ Vor allem: "Comments should not duplicate the code."
Findet man nur selten. Oft gibt es eine ellenlange Lizenz am Anfang, aber überhaupt keinen Hinweis darauf, was der Code eigentlich überhaupt machen soll. Weil jemand meinte, daß der Code ja "so leicht lesbar wie ein Buch" sei. Einbuchstabige Variablennamen inklusive, und damit meine ich nicht i und p.
Ich nenne meine Variablen auch lieber "hans" und "joachim" und deren Summe natürlich hans_joachim. Dann freuen sich die Kollegen, so haben sie gleich einen persönlichen Bezug zu den beiden. :-) Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|