web & mobile DEVELOPER 06 / 2016 – Deutsche Bahn Open Data

Bildschirmfoto 2016-04-01 um 14.29.33

 

Deutsche Bahn Open Data

Vorbei sind die Zeiten, in denen man an die Daten der Deutschen Bahn nur per Hacks oder eigener Erfassung gekommen ist. Seit Ende 2015 betreibt die Bahn eine Open Data Schnittstelle, über die per API bzw. über Datensätze auf zahlreiche Daten ganz offiziell zugegriffen werden kann.

Von Patrick Lobacher

Momentan noch als Beta gekennzeichnet, stellt die Open Data Schnittstelle der Bahn bereits jetzt zahlreiche Datensätze als XML/JSON basierte REST-Schnittstelle einerseits und als Download (JSON, Excel oder XML) andererseits zur Verfügung. Geplant ist zusätzlich die stetige Erweiterung der Daten – so wurde am 25.02.2016 beispielsweise die Daten des Fernverkehrs integriert.

Stand heute gibt es bereits Dienste innerhalb der API:

  • Fahrplan
    Bahnhofssuche, Abfahrtstafel, Ankunftstafel, Zuglauf
  • Parkplätze
    Bahnhöfe, Parkräume, Belegungsdaten ausgewählter Parkräume

Die Daten dieser APIs werden bereitgestellt unter der Lizenz Creative Commons Attribution 4.0 International (CC BY 4.0).

 

Datensätze

Als Datensätze stehen zur Zeit die folgenden zur Verfügung:

  • Aufzugsdaten
    Equipment, Ort, Wirtschaftseinheit, Hersteller, Baujahr, Antriebsart, Kabinenhöhe, Förderhöhe, Tragkraft, Koordinaten, …
  • Bahnsteigdaten
    Bahnhofsnummer, Bahnsteignummer, Nr. der Bahnsteigkante, Gleis, Bahnsteiglänge, Höhe Bahnsteigkante, …
  • Bahnsteigdaten (RNI)
    Bahnhofsnummer, Bahnsteignummer, Bahnsteiglänge, Höhe Bahnsteigkante, …
  • Betriebsstellenverzeichnis
    Bahnhöfe, Anschluss-, Ausweichanschluss-, Abzweig-, Überleitstellen, Haltepunkte, Blockstellen, Streckenwechsel, …
  • Haltestellen
    EVA-Nr, DS 100, Name Haltestelle, Koordinaten,…
  • Netzradar
    LTE, Mobilfunk, Konnektivität, GeoJSON, Mobilfunkanbieter, O2, E-Plus, Vodafone, T-Mobile, …
  • Reisezentren
    Reisezentrum, Öffnungszeiten, Verkaufsstellennummer, Koordinaten…
  • Serviceeinrichtungen
    Bundesland, Regionalbereich, Betriebsstelle, Gleis-Nr, Funktionskategorie, Weiche, Gleislänge, Oberleitungslänge, Nutzlänge, DS100, …
  • Stationsdaten
    Adresse, Bahnhof, Station, DS 100, Kategorie, Aufgabenträger, Nahverkehr, Fernverkehr…
  • Stationsdaten (RNI)
    Bahnhof, Station, Kategorie, Aufgabenträger, Nahverkehr, Fernverkehr…
  • Streckennetz
    Streckennetz, Geodaten, INSPIRE, Bauwerke, Tunnel, Bahnübergänge, Betriebsstellen, Bahnhöfe, Haltestellen,…
  • Stuttgart 21 (Geodaten)
    Gleistrassen, Umrisse, Webcam-Standorte, Gleisanlagen, Stuttgart 21,…

Die Datensätze werden auf der Seite http://data.deutschebahn.com/datasets/ referenziert.

So kann man beispielsweise eine Liste aller Haltestellen über den folgenden Link herunterladen und bekommt nachfolgende Liste geliefert:

Listing 1: Download Liste der Haltestellen

In den veröffentlichten Daten sind zu jeder Haltestelle beispielsweise folgende Informationen enthalten:

  • EVA_NR
    Nummer der Haltestelle, z. B. 8000001.
  • DS100
    Verweis auf Betriebsstelle, z. B. KA.
  • NAME
    Name der Haltestelle, z. B. Aachen Hbf.
  • VERKEHR
    Kann folgende Werte annehmen ‘FV’ (mit Fernverkehr), ‘RV’ (nur Regionalverkehr) oder ‘nur DPN’ (nur Regionalverkehr von privaten Eisenbahnunternehmen).
  • LAENGE
    Longitude der Haltestelle in WGS84, z. B. 6.091499.
  • BREITE
    Latitude der Haltestelle in WGS84, z. B. 50.7678.

 

Aufbau der Fahrplan API

Die API wird durch einen Aufruf einer URL mit dem folgenden Aufbau angesprochen:

Dabei ist die Version zur Zeit immer 1.0.

Parameter gibt es je nach Dienst unterschiedliche – man benötigt aber in fast allen Fällen einen Parameter authKey, den man zur Zeit per formloser Email an dbopendata@deutschebahn.com anfordern kann.

Das Format wählt man über den Parameter format. Per Default wird hier XML ausgegeben, wählt man als Wert „json“ so wird auf das JSON-Format umgestellt. Dabei wird der JSON-Content durch Umwandlung des XML-Outputs mit folgenden Regel generiert:

  • Element-Namen werden zu Objekt-Eigenschaften
  • Text (PCDATA) wird zu Objekt-Eigenschaften mit „$“ – also <a>foo</a> wird zu { "a": { "$" : "foo" } }
  • Verschachtelte Elemente werden zu verschachtelten Eigenschaften – also <a><b>foo</b><c>foo</c></a> wird zu { "a": { "b" : { "$": "foo" }, "c": { "$": "foo"} } }
  • Gibt es mehrere Elemente mit dem selben Namen, erzeugt JSON hierfür ein Array – also
    <a><b>foo1</b><b>foo2</b></a> wird zu { "a": { "b" : [{"$": foo1" }, {"$": "foo2" }] } }
  • Eigenschaftsnamen werden zu Objekt-Eigenschaften – also <a atb="foo1">foo2</a> wird zu { "a": { "atb" : "foo1", "$" : "foo2" } }

Die REST-API unterstützt zudem verschiedene Sprachen – diese können über den Parameter lang=<code> selektiert werden. Default ist hierbei immer Englischg (en). Weitere Sprachen sind wie folgt möglich:

  • Deutsch – de
  • Dänisch – da
  • Spanisch – es
  • Französisch – fr
  • Italienisch – it
  • Holländisch – nl
  • Polnisch – pl

Jeder Service wird zudem von einer XSD (XML Schema Definition) definiert, die auch ohne Authentifizierung angerufen werden kann

Listing 2: Aufruf einer Schema-Datei

Bahnhofssuche

Die Bahnhofssuche (Service-Name: location.name): liefert zum angefragten Suchstring (anzugeben mit dem Parameter input) eine Liste von Bahnhöfen mit ihrer jeweiligen API spezifischen Bahnhofs-IDs. Anstelle von <<AuthKey>> tragen Sie den individuellen Key ein.

Listing 3: location.name Service

Hier erhält man als Antwort sowohl den Namen, wie auch die Geodaten des Bahnhofs. Ebenfalls mitgeliefert wird auch die ID, welche in späteren Abfragen als Referenz benötigt wird.

 

Abfahrtstafel

Die Abfahrtstafel (Service-Name: departureBoard) liefert zu einer gegebenen Bahnhof-ID (anzugeben mit id) und optional Datum (date) sowie Uhrzeit (time) die planmäßig nächsten Abfahrten.

Im Beispiel wird der Bahnhof München (ID aus der vorherigen Abfrage) am 04.04.2016 ab 9:00 Uhr angefragt.

Listing 4: departureBoard Service

Hier erhält man nun die Abfahrtsdaten zurück, welche z.B. den Namen des Zuges, Zugtyp, Zeit, Datum und den Zielbahnhof enthält.

Als JourneyDetailRef wird ein Link zurückgegeben, der über die API die Reisedaten des Zugs zurückgibt.

Ankunftstafel

Die Ankunftstafel (Service-Name: arrivalBoard) liefert zu einer gegebenen Bahnhof-ID (anzugeben mit id) und optional Datum (date) sowie Uhrzeit (time) die planmäßig nächsten Ankünfte.

Im Beispiel wird der Bahnhof München (ID aus der vorherigen Abfrage) am 04.04.2016 ab 9:00 Uhr angefragt.

Listing 5: arrivalBoard Service

 

Reiseinfos

Die Reiseinfos (bzw. offiziell „Zuglauf genannt, Service-Name: journeyDetail) liefert den Reiseverlauf eines Zuges und wird jeweils beim Request von departureBoard und arrivalBoard mit angegeben.

Im Beispiel wird der Bahnhof München (ID aus der vorherigen Abfrage) am 04.04.2016 ab 9:00 Uhr angefragt.

Listing 5: arrivalBoard Service

 

Parkplätze

Parkplätze werden über die „DB BahnPark – OpenData Schnittstelle für Parkrauminformationen“ angezeigt.

Hierfür kann man sich zunächst die Liste der Bahnhöfe mit Parkplatzmöglichkeiten anzeigen lassen (Service: stations):

Listing 5: stations Service

Die Parkräume selbst kann man über den Service sites ermitteln lassen:

Listing 6: sites Service

 

Für bestimmte Parkräume kann sogar die aktuelle Belegung angezeigt werden (Service: occupancy) – dafür wird die ID des Parkraums angegeben, die bei der vorherigen Abfrage als parkraumid übermittelt worden ist:

Listing 7: occupancy Service

Dabei ist die Kategory (Feld: category) gleichbedeutend mit folgender Belegung:

  • 1
    0 – 10 freie Stellplätze
  • 2
    10 – 30 freie Stellplätze
  • 3
    30 – 50 freie Stellplätze
  • 4
    mehr als 50 freie Stellplätze

Alle Belegungen bekommt man mit dem generischen Aufruf:

Clients

Selbstverständlich gibt es mittlerweile auch eine Reihe von Clients, um die API direkt abzufragen:

  • JavaScript
    https://github.com/pbock/fahrplan
  • Java
    https://github.com/highsource/db-fahrplan-api
    https://github.com/marcusschiesser/openbahn-api
  • Ruby
    https://github.com/gasman/bahn
  • ReactJS
    https://github.com/brakmic/OpenLok

Fazit

Die Bahn veröffentlicht seit November 2015 schrittweise freigegebene Daten und ist hier noch lange nicht fertig damit. Dabei ist ihr auch der Austausch mit Entwicklern wichtig – auch durch Wettbewerbe und Hackathons. Feedback kann so jederzeit entweder in den API-Dokumenten oder per Email unter DBOpenData@deutschebahn.com eingereicht werden.

 

 

Links zum Thema

Deutsche Bahn Open Data Portal
http://data.deutschebahn.com/

Fahrplan API Dokumentation
http://data.deutschebahn.com/apis/fahrplan/Fpl-API-Doku-Open-Data-BETA-0_81_2.pdf

Parkplätze API Dokumentation
http://data.deutschebahn.com/apis/parkplatz/opendata_dbbahnpark_08.pdf

Timetable im GTFS-Format
https://github.com/fredlockheed/db-fv-gtfs

Twitter Account des Projekts
https://twitter.com/dbopendata

 

 

Leave a Comment.