Administrator Startseite

Apple

iOS, iTunes, Mac OS X

Entwicklung

BASIC, C und C++, Assembler, Batch & Shell, Bibliotheken & Toolkits, CSS, Datenbanken, HTML, IDE & Editoren, Installation, Java, JavaScript, KiXtart, Lizenzierung, Pascal & Delphi, Perl, PHP, Python, VB for Applications, Visual Studio, Webentwicklung, XML

Hardware

Benchmarks, Cluster, CPU, RAM, Mainboards, Drucker und Scanner, Festplatten, Raid, Grafikkarten & Monitore, LAN, WAN, Wireless, Multimedia & Zubehör, Notebook & Zubehör, Router & Routing, SAN, NAS, DAS, Server-Hardware, Sonstige Peripheriegeräte, Speicherkarten, Switche und Hubs

Internet

Blogs, CMS, Domain Registrierung, E-Books, E-Business, E-Mail, Flatrates, Hosting & Housing, Informationsdienste, Instant Messaging, Onlinedienste, SEO, Server, Soziale Netzwerke, Utilities, Webbrowser

Linux

Apache Server, Debian, Desktop, Netzwerk, OpenOffice, LibreOffice, RedHat, CentOS, Fedora, Samba, Suse, Tools & Utilities, Ubuntu, Userverwaltung

Microsoft

Exchange Server, Hyper-V, Installationsprobleme, Netzwerk, Office, Outlook & Mail, Systemdateien, Tools & Utilities, Userverwaltung, Visual Studio, Windows 7, Windows 8, Windows 10, Windows Phone, Windows Server, Windows Vista, Windows XP

Multimedia

Audio, Digitiales Fernsehen, Grafik, Icons, Schriftarten, Video

Netzwerke

Cluster, DNS, DSL, VDSL, Groupware, Grundlagen, ISDN & Analoganschlüsse, LAN, WAN, Wireless, Monitoring, Netzwerkmanagement, Netzwerkprotokolle, Router & Routing, TK-Netze & Geräte, UMTS, EDGE & GPRS, Voice over IP

Off Topic

Administrator.de Feedback, Humor (lol), Papierkorb

Sicherheit

Backup, Erkennung und -Abwehr, Firewall, Grundlagen, Informationsdienste, Rechtliche Fragen, Sicherheits-Tools, Tipps & Tricks, Verschlüsselung & Zertifikate, Viren und Trojaner

Sonstige Systeme

Google Android, MikroTik RouterOS, Novell Netware, Sun Solaris

Virtualisierung

Hyper-V, KVM, Vmware, Xenserver

Weiterbildung

Aus- und Weiterbildung, Ausland, Schulung & Training, Studentenjobs & Praktikum

Zusammenarbeit

Suche Projektpartner

Nächster Wissensbeitrag

Datenträgerbereinigung in SBS 2011
Weniger Werbung?
Cover IT-Administrator
Sie ist aufwendig, kostet Geld und bringt in der Regel keinen unmittelbar sichtbaren Nutzen: Die Client-Security. Dabei ist das richtige Absichern von Rechnern für Unternehmen wichtiger denn je, nehmen doch zielgerichtete Angriffe auf Firmen immer weiter zu. Im Oktober dreht sich im IT-Administrator alles rund um den Schwerpunkt 'Client-Sicherheit & Management'. Darin erfahren Sie unter anderem, wie Sie dank Dateisystemverschlüsselung vertrauliche Daten schützen und mit ... mehr
Mitglied: dog
03.12.2011, aktualisiert 01:16 Uhr, 16141 Aufrufe

HAFAS Fahrplanauskunft API - Sammlung

Hier sammle ich unsortiert ein paar Dinge zum Zugriff auf Fahrplandaten per API

Die Situation bei Fahrplanauskünften


Allgemein sieht die Situation beim Zugriff auf Fahrplanauskunftsdaten eher recht traurig aus. Die einzelnen Verkehrsverbände, die für ihre Pläne verantwortlich sind betrachten die Pläne als ihr Eigentum und geben die Daten auch auf Anfrage eher selten frei.

HAFAS


Das Programm HAFAS wird von der Firma HaCon hergestellt und kommt bei einem Großteil der Verkehrsverbände in Deutschland und teilweise auch in anderen Ländern zum Einsatz. HAFAS bietet zwar Schnittstellen, aber HaCon verweigert die Herausgabe der Spezifikation, da dies die Entscheidung des Kunden sei.

Klicken Sie auf das Bild, um es zu vergrößern - 2c1b30b3102181c28968cc959485e12d.jpg

HAFAS lässt sich recht leicht durch die URL identifzieren. Diese enthält meistens query.exe oder stboard.exe

Klicken Sie auf das Bild, um es zu vergrößern - df5888d96bc97d77ab1926ecb2d8aec8.jpg

Das andere beliebte System ist EFA der Firma Mentz Datenverarbeitung, dass sich über XSLT_TRIP_REQUEST in der URL identifizieren lässt.

Daneben gibt es vereinzelt noch andere Systeme.

Interoperabilität


Für die Kommunikation der Fahrplansysteme untereinander gibt es das DELFI-Projekt.
Die Spezifikation dafür ist offen zugänglich.

Die Interoperabilität der Systeme ist dabei abweichend gut.
Das HAFAS-System der Bahn zeigt z.B. problemlos auch regionale Routen aus anderen HAFAS- und EFA-Systemen an.
Bei den regionalen Verbänden konnte ich noch keinen Fall finden bei dem EFA und HAFAS zusammenarbeiten.
HAFAS-Systeme untereinander zeigen in manchen Fällen die genauen Haltestellen andere Verbände an, manchmal auch nur Gemeinden.

Wer also deutschlandweit nach Informationen sucht, sollte das System der DB benutzen.

JSON-API


HAFAS bietet eine JSON-API an - allerdings scheinbar nur in Ländern, die mit ihren Daten liberaler umgehen, wie Schweden oder Dänemark.
http://travelhack.se/dijamwisaam/downloads/HAFAS_ReST_Interface_VT_104. ...
http://labs.rejseplanen.dk/files/api/rest_documentation_latest.pdf

Da diese API einen API-Key benötigt wird sie hier mal ignoriert.

XML-API


Schwerer aufzutreiben ist die XML-API. HaCon bietet hierfür keine offene Dokumentation an und unter die referenzierte XSD-Datei http://hafassrv.hacon.de/xml/hafasXMLInterface.xsd ist auch nicht vorhanden.
Wenn man etwas sucht findet man allerdings eine Kopie:
http://demo.hafas.de/hafas-res/sbb/xml/47r/hafasXMLInterface.xsd

Die XML-Daten werden in diesem Fall per POST an die Basis-URL von HAFAS query.exe/dn gesendet.
Allgemein scheint HAFAS dabei ISO-8859-1 lieber zu sehen als UTF-8.

Beispiele


Haltestelle finden (undokumentiert)


Diese Funktion ist nicht dokumentiert.
Um eine Auflistung von Haltestellen zu finden sieht der Request so aus:
01.
POST /query.exe/dn HTTP/1.1 
02.
Host: ??? 
03.
Content-Type: application/xml; charset=utf-8 
04.
Content-Length: ?? 
05.
Connection: close 
06.
 
07.
<?xml version="1.0" encoding="UTF-8" ?> 
08.
<ReqC ver="1.1" prod="String" lang="DE"> 
09.
 <MLcReq> 
10.
  <MLc n="Haltestellename" t="ST" /> 
11.
 </MLcReq> 
12.
</ReqC>

Die Antwort sieht z.B. so aus:
01.
<?xml version="1.0" encoding="ISO-8859-1"?> 
02.
<ResC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://hafassrv.hacon.de/xml/hafasXMLInterface.xsd" ver="1.1" prod="String" lang="EN"> 
03.
	<MLcRes flag="FINAL"> 
04.
		<MLc t="ST" n="Hauptbahnhof Nord, Dresden" i="A=1@O=Hauptbahnhof Nord, Dresden@X=13734996@Y=51041407@U=80@L=000972032@B=1@p=1321988872@" x="13734996" y="51041407" /> 
05.
		[...] 
06.
	</MLcRes> 
07.
</ResC>
Die erhaltenen Koordinatenwerte kann man z.B. auf Google Maps als 51.041407, 13.734996 eingeben, um den Standort zu sehen.

Haltestelle finden (dokumentiert)


Die in der xsd-Datei dokumentierte Methode sieht beispielsweise so aus:
01.
<?xml version="1.0" encoding="utf-8" ?> 
02.
<ReqC ver="1.1" prod="String" lang="DE"> 
03.
	<LocValReq id="001" maxNr="20" sMode="1"> 
04.
		<ReqLoc type="ST" match="Hauptbahnhof, Berlin" /> 
05.
	</LocValReq> 
06.
</ReqC>

01.
<?xml version="1.0" encoding="ISO-8859-1"?> 
02.
<ResC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://hafassrv.hacon.de/xml/hafasXMLInterface.xsd" ver="1.1" prod="String" lang="EN"> 
03.
	<LocValRes flag="FINAL" id="001"> 
04.
		<Station name="Berlin Hbf" externalId="008011160#81" externalStationNr="008011160" type="WGS84" x="13369548" y="52525589"/> 
05.
		[...] 
06.
	</LocValRes> 
07.
</ResC>

Bei weiteren Requests sollte das Attribut externalId für die Haltestelle benutzt werden.

Abfahrten anzeigen


Der Aushangfahrplan ("STationBoard") lässt sich über diese Methode erhalten.
Soweit die Theorie.

In der Praxis verweigert query.exe den Dienst und gibt einfach eine normale Seite zurück.
Die Alternative stboard.exe gibt zwar ein Ergebnis zurück, aber das ist immer leer.
Und die dritte Schnittstelle extxml.exe ist nicht überall verfügbar und wenn, dann braucht man einen API-Key (Attribut accessId in ReqC).

01.
<?xml version='1.0' encoding='iso-8859-1'?> 
02.
<ReqC ver='1.1' prod='String' lang='de' accessId='???'> 
03.
	<STBReq boardType='DEP'> 
04.
		<Time>11:20:11</Time> 
05.
		<Today /> 
06.
		<TableStation externalId='009100003#86'/> 
07.
		<ProductFilter>1111111111111111</ProductFilter> 
08.
	</STBReq> 
09.
</ReqC>

01.
<?xml version="1.0" encoding="iso-8859-1"?> 
02.
<ResC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://demo.hafas.de/xml/vbb/dai/hafasXMLInterface.xsd" ver="1.1" prod="HAFAS 5.28.VBB.4.7g" lang="DE"> 
03.
  <STBRes> 
04.
    <JourneyList> 
05.
      <STBJourney> 
06.
        <MainStop> 
07.
          <BasicStop index="6"> 
08.
            <Station name="S+U Alexanderplatz Bhf (Berlin)" x="13412831" y="52521148" type="WGS84" externalId="9100003#86" externalStationNr="9100003"/> 
09.
            <Dep> 
10.
              <Time>11:20</Time> 
11.
            </Dep> 
12.
          </BasicStop> 
13.
        </MainStop> 
14.
        <JourneyAttributeList> 
15.
          <JourneyAttribute from="6" to="15"> 
16.
            <Attribute type="NAME"> 
17.
              <AttributeVariant type="NORMAL"> 
18.
                <Text>U2</Text> 
19.
              </AttributeVariant> 
20.
            </Attribute> 
21.
          </JourneyAttribute> 
22.
          <JourneyAttribute from="6" to="15"> 
23.
            <Attribute type="CATEGORY" code="1"> 
24.
              <AttributeVariant type="NORMAL"> 
25.
                <Text>U</Text> 
26.
              </AttributeVariant> 
27.
            </Attribute> 
28.
          </JourneyAttribute> 
29.
          <JourneyAttribute from="6" to="15"> 
30.
            <Attribute type="OPERATOR"> 
31.
              <AttributeVariant type="NORMAL"> 
32.
                <Text>BVG</Text> 
33.
              </AttributeVariant> 
34.
            </Attribute> 
35.
          </JourneyAttribute> 
36.
          <JourneyAttribute from="6" to="15"> 
37.
            <Attribute type="NUMBER"> 
38.
              <AttributeVariant type="NORMAL"> 
39.
                <Text>U2</Text> 
40.
              </AttributeVariant> 
41.
            </Attribute> 
42.
          </JourneyAttribute> 
43.
          <JourneyAttribute from="6" to="15"> 
44.
            <Attribute type="DIRECTION"> 
45.
              <AttributeVariant type="NORMAL"> 
46.
                <Text>U Gleisdreieck (Berlin)</Text> 
47.
              </AttributeVariant> 
48.
            </Attribute> 
49.
          </JourneyAttribute> 
50.
          <JourneyAttribute from="0" to="15"> 
51.
            <Attribute priority="350" type="NORMAL" code="RA"> 
52.
              <AttributeVariant type="NORMAL"> 
53.
                <Text>Fahrradmitnahme möglich</Text> 
54.
              </AttributeVariant> 
55.
            </Attribute> 
56.
          </JourneyAttribute> 
57.
          <JourneyAttribute from="0" to="15"> 
58.
            <Attribute priority="1" type="NORMAL" code="bf"> 
59.
              <AttributeVariant type="NORMAL"> 
60.
                <Text>barrierefrei</Text> 
61.
              </AttributeVariant> 
62.
            </Attribute> 
63.
          </JourneyAttribute> 
64.
        </JourneyAttributeList> 
65.
        <ServiceDaysList> 
66.
          <ServiceDays> 
67.
            <RegularServiceText> 
68.
              <Text>nicht täglich</Text> 
69.
            </RegularServiceText> 
70.
            <IrregularServiceText> 
71.
              <Text>2., 3. Dez 2011</Text> 
72.
            </IrregularServiceText> 
73.
          </ServiceDays> 
74.
        </ServiceDaysList> 
75.
      </STBJourney> 
76.
      [...] 
77.
    </JourneyList> 
78.
  </STBRes> 
79.
</ResC>

Damit bleiben zwei Möglichkeiten:
Der iOS-Gateway der Bahn (mgate.exe) lies sich zu einer Antwort überreden, die aber wieder ein anderes Format besitzt.

01.
<?xml version='1.0' encoding='iso-8859-1'?> 
02.
	<ReqC ver='1.1' prod='String' lang='de'> 
03.
		<STBReq boardType='DEP'> 
04.
			<Time>11:20:11</Time> 
05.
			<Period> 
06.
				<DateBegin>20111202</DateBegin> 
07.
				<DateEnd>20111202</DateEnd> 
08.
			</Period> 
09.
			<TableStation externalId='008011160#81'/> 
10.
			<ProductFilter>1111111111111111</ProductFilter> 
11.
		</STBReq> 
12.
	</ReqC>
Der ProductFilter gibt an, welche "Produkte" (Straßenbahn, Bus, ...) benutzt werden dürften. Ohne diese Angabe gibt das System keine Auskunft.

01.
<?xml version="1.0" encoding="iso-8859-1"?> 
02.
<ResC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://hafassrv.hacon.de/xml/hafasXMLInterface.xsd" ver="1.1" prod="HAFAS 5.29.DB.R8.40.h" lang="DE" ld="9649"> 
03.
	<STBResIPhone boardType="dep"> 
04.
		<Entries> 
05.
			<StationBoardEntry name="Bus  TXL" category="Bus" product="5" direction="Flughafen Tegel Airport" scheduledTime="11:20" scheduledPlatform=""> 
06.
				<JHandle tNr="515505" puic="80" cycle="12"/> 
07.
				<Station name="Berlin Hauptbahnhof (S+U), Berlin" x="13368901" y="52526290" type="WGS84" externalId="730749#80" externalStationNr="730749"/> 
08.
				<Messages></Messages> 
09.
				<MessageContainerElement> 
10.
					<MessageCluster></MessageCluster> 
11.
				</MessageContainerElement> 
12.
			</StationBoardEntry> 
13.
			[...] 
14.
		</Entries> 
15.
		<MessageContainerHeader> 
16.
			<MessageCluster></MessageCluster> 
17.
		</MessageContainerHeader> 
18.
	</STBResIPhone> 
19.
</ResC>

Wenn man stboard.exe/dn mit den richtigen Parametern füttert bekommt man die Abfahrten in verschiedenen Formaten ausgegeben.
Die Paramter, die per POST oder GET übergeben werden könnten sind u.A.:

Paramter Bedeutung
productsFilter Verwendete Verkehrsmittel (s.O.). Für "Alle" weglassen oder "11111111111111". Achtung: Die konkreten Filterwerte unterscheiden sich zwischen den HAFAS-Systemen
maxJourneys Maximale Anzahl an Einträgen in Anzeige
time Abfahrtszeit als HH:MM oder actual für Jetzt
inputTripelId (sic!) Die Haltestellen-ID im Format wie sie die undokumentierte Funktion zur Haltestellensuche ausgibt
input (Alternativ) Die Haltestellen-ID aus dem externalStationNr-Feld der dokumentierten Methode.
inputRef (Wird beim Formular benutzt) <Name der Haltestelle>#<externalStationNr>
boardType dep = Abfahrten, arr Ankunften
L Ausgabeformat. Variiert bei verschiedenen Systemen. Textbasiert z.B.: vs_java, vs_java2, vs_java3
start yes um die Abfrage zu starten (sonst Formular)

Die Methode über input war zwischen HAFAS-Systemen nicht zuverlässig, inputTripleId sollte aber auch dann funktionieren.

Sprachcodes in den URLs


HAFAS verwendet am Ende der URL noch eine Endung, damit werden verschiedene Versionen angesprochen:

Erweiterung Funktion
dn Deutsch, normal
dl Deutsch, nur Text
dox Deutsch, Handyversion

Dabei kann der erste Buchstabe ersetzt werden:

Buchstabe Sprache
d  Deutsch
n Niederländisch
p  Polnisch
e Englisch
i Italienisch
f Französisch
m Dänisch
h Spanisch
Neuester Wissensbeitrag
Sicherheit
Information: ACHTUNG WICHTIGER HINWEIS FÜR DRUPAL-NUTZER Alle Nutzer die das Content-Management-System Drupal einsetzen, sollten unbedingt Ihr System checken. Wer die Sicherheitspatches vom 15 Oktober nicht innerhalb von 7 Stunden ... von colinardo, in Sicherheit
Diese Inhalte könnten dich auch interessieren
Domain Registrierung
Frage: Hallo, ich möchte gerne meine zahlreich verstreuten Domains (nur de/org/com) zu einem neuen Anbieter umziehen. Teilweise kosten mich vor langer Zeit angelegte DE-Domains 30€ im Jahr ;) Der ... von soyougeman, in Domain Registrierung
E-Business
Frage: Hallo! Wir haben ein älteres Warenwirtschaftssystem im Einsatz, dass noch vor der großen E-Commerce-Welle eingekauft wurde. Für unseren neuen Onlineshop müssten wir also eine spezielle Schnittstelle programmieren lassen. ... von scheuffele, in E-Business
Ubuntu
Frage: Hi, ich betreibe einen kleinen Ubuntu Server (14.04.1 LTS) zuhause, nun möchte ich eine Cloud fest als zusätzliches Laufwerk einbinden, ich habe aber das Problem das ich nur ... von Kammii, in Ubuntu
Installationsprobleme
Frage: Hallo zusammen, wir haben in unserem Unternehmen Windows 2012 Terminalserver Sammlung im Einsatz. ( Kein R2 2 Sammlungen) Die Sammlung besteht bis jetzt aus 6 Servern. Server 1 ... von domeyer, in Installationsprobleme
Windows Server
Frage: Hallo, Wir haben gerade unseren Firma auf VMware VShpere 5.1 Virtualisiert und als nächsten schritt nun unseren Verkauf auf Windows 2012 R2 Sammlung verteilt. Nun haben wir gemerkt ... von sTiTsch01, in Windows Server
Heiß diskutierte Inhalte
Windows Server
Frage: Guten Tag, Wir haben seit ein paar Wochen einen Server 2012 standard im Netzwerk und unseren alten Server letzte Woche abgebaut nachdem alles zu funktionieren schien. AD, DNS, ... von AKChris, in Windows Server
LAN, WAN, Wireless
Frage: Ich habe folgenden WLAN-AP-Router gecheckt: Cisco RV110W Ziel war, dass ich 3 SSIDs austrahle welche jeweils einem eigenem VLAN zugeordnet werden sollen. Dies war auch möglich. Überrascht ... von paj2000, in LAN, WAN, Wireless
Router & Routing
Frage: Hallo Kollegen! Mitarbeiter X hat zuhause seinen Home-Server die IP 192.168.0.2 gegeben. Unser Fileserver hat auch die 192.168.0.2. Nun verbindet er sich mit dem Cisco VPN Client (zu ... von Hakketas, in Router & Routing
Exchange Server
Frage: Hallo Administratoren! wir betreiben einen Exchange 2007 Server auf einem SBS2008 und haben folgendes Problem: Ein Mitarbeiter kann keine Mails von extern erhalten, weil von Exchange irgendwo aus ... von mcknife, in Exchange Server
Userverwaltung
Frage: Hallo zusammen, wir haben demnächst den Fall, dass ein Mitarbeiter das Unternehmen verlässt. Da ich so einen Fall noch nie hatte, wollte ich mich gerne erkundigen bei euch, ... von PM-Manuel, in Userverwaltung