Zugfahrplan

  Philipp Seitzinger   Lesezeit: 2 Minuten  🗪 9 Kommentare Auf Mastodon ansehen

Mit Daten von opendata.ch einen Fahrplan erstellen.

zugfahrplan

Wenn ich mit dem Zug reise, habe ich gerne einen gedruckten Fahrplan zur Hand. Für mich ist der Bildschirm von einem Smartphone zu klein (liegt wohl an meinem Alter und meinen Augen). Hilfreich ist so ein Fahrplan auch in speziellen Situationen. Meine Frau hat mit unserer Tochter eine Wanderung ab Airolo geplant. Die Tochter wohnt in der Umgebung von Bern und wir in der Nähe von Langenthal. Es ging nun darum, wo sich die Beiden treffen können, um die Reise gemeinsam fortzusetzen. Von Bern gibt es einen direkten Zug mit Bahn2000 ohne Halt bis Zürich. Von Langenthal geht die Reise via Olten/Luzern.

Von Opendata gibt es einen interessanten Bereich Transport. Mittels API sind die Fahrpläne aus der Schweiz abrufbar. Der Befehl mit curl lautet ( Sonderzeichen müssen als HTML Entities geschrieben werden. Eine Liste gibt es z.B bei https://www.freeformatter.com/html-entities.html):

curl -G -d "from=Langenthal" -d "to=Airolo" -d "datetime=2025-07-28T07%3A00" -d "limit=4" http://transport.opendata.ch/v1/connections >fahrplan.json

Für das Auslesen der Daten verwende ich jq. Dieses Programm lässt sich in Debian installieren mit apt install jq. Zuerst möchte ich eine Übersicht der Züge mit Angabe der Reisedauer. Der Befehl lautet:

jq -r '.connections[] | [.from.station.name, .to.station.name, .from.departure, .duration ] | @tsv' fahrplan.json

Ausgabe:

Nun möchte ich die Details zur ersten Verbindung (connections[0]). Der Befehl lautet:

jq -r '
  .connections[0].sections[].journey.passList[]
  | {Location: .station.name,arrival,departure, platform} 
' fahrplan.json | mlr --ijson --opprint --barred cat

Falls das Programm mlr fehlt, lässt es sich installieren mit Befehl apt install miller. Der Befehl mlr gibt Daten aus verschiedenen Quellen in einer schönen Tabelle aus.

Ausgabe:

Nach einer weiteren Abfrage bei opendata.ch ab Bern und Ausgabe der Zwischenstationen ergibt sich der Treffpunkt in Arth-Goldau.

Mit folgendem Befehl werden auch die Zugnummern ausgegeben:

jq -r '.connections[0].sections[][]
| {Location: .station.name,arrival,departure, platform,category,number} 
' fahrplan.json  | mlr --ijson --opprint --barred cat | sed 's/null/    /g' | aha >fahrplan.html

Mit dem sed Befehl entferne ich die "null"-Werte und erstelle mit dem Befehl aha eine HTML-Datei. Am Bildschirm sieht es so aus:

Und dies ist die Ausgabe der Verbindung via Zürich:

Titelbild: https://pixabay.com/de/photos/zug-bahnhof-plattform-eisenbahn-5961146/

Tags

Opendata, jq, JSON, mlr

tuxfanmatze
Geschrieben von tuxfanmatze am 22. Juli 2025 um 11:59

Cooler Tipp, danke! Mal gucken, ob das auch bei anderen Verkehrsverbünden wir de Hamburger HVV geht.

Pascal Dietrich
Geschrieben von Pascal Dietrich am 22. Juli 2025 um 15:18

Da das eine Schweizer Seite ist, denke ich eher nicht.

Rascal
Geschrieben von Rascal am 22. Juli 2025 um 12:28

Kennt jemand zufällig jemanden bei opendata.ch? Deren RSS-Feed funktioniert nicht und ich hatte mich diesbezüglich bereits mal dort gemeldet.

Ein Portal dass sich FOSS auf die Kape schreibt, deren Blog aber keinen RSS Feed hat, ist meiner Meinung nach nicht sehr autenthisch..

kaligule
Geschrieben von kaligule am 23. Juli 2025 um 07:52

Das ist soo cool. Das probiere ich auch mal, am besten mit Shell alias:

alias bus=skript_das_Bus_Abfahrtszeiten_anzeigt.bash

Naja
Geschrieben von Naja am 23. Juli 2025 um 11:35

Vielleicht findet hier jemand was für die Deutsche Bahn: https://developer-docs.deutschebahn.com/doku/apis

Benno
Geschrieben von Benno am 23. Juli 2025 um 13:08

Für Zuge von und nach Frankreich (ab Basel oder Freiburg, Düsseldorf, Köln, etc:) gibt es diese Webseite, die Datenschutz, Werbe- und Cookiefreiheit zu ihren zentralen Grundsätzen erklärt hat.

https://www.12train.com/

Es handelt sich eigentlich um ein Reisebüro, dass einen besonderen Vertrag mit der franz. Bahngesellschaft. SNCF abgeschlossen hat, damit es die Fahrpläne auf ihrer Webseite anzeigen darf.

Ist aber halt nur für Frankreich bzw. für die gemeinsam von SNCF, SBB und DB betriebene Züge.

niels
Geschrieben von niels am 23. Juli 2025 um 15:01

Cool - in Deutschland gibt es solche API meine ich nicht. Würde auch wenig helfen, da ein statischer Fahrplan vermutlich nicht eingehalten wird ;-)

klausb
Geschrieben von klausb am 23. Juli 2025 um 15:50

Besonders interessant finde ich ja das Tool miller bzw. mlr. Der Hinweis auf die DB-Apis st auch gut, aber leider sind in Deutschland Fahrplan und tatsächliche Abfahrts-/Ankunftszeiten zwei völlig verschiedene Dinge :(

👓
Geschrieben von 👓 am 24. Juli 2025 um 16:09

An vielen haltestellen gibts bei den analogen Fahrplänen einen QRcode, der auf eine Webseite verlinkt auf der nur gerade die nächsten Abfahrten der halte stelle aufgeführt sind. Das ist die selbe Quelle, die gewisse Bars/Pubs auch nutzen um auf einem Bildschirm die nächsten Abfahrten anzuzeigen.