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 mit apt install jq installieren. 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.jsonAusgabe:
Nun möchte ich die Details zur ersten Verbindung (Verbindungen[0]). Der Befehl lautet:
jq -r '
.connections[0].sections[].journey.passList[]
| {Location: .station.name,arrival,departure, platform}
' fahrplan.json | mlr --ijson --opprint --barred catFalls das Programm mlr fehlt, lässt es sich mit Befehl installieren 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.htmlMit 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:
https://pixabay.com/de/photos/zug-bahnhof-plattform-eisenbahn-5961146/


