wunderwarzenschwein: Fahrplanauskunft (Hafas) ansteuern

Hi,

Hat jemand schon Erfahrungen damit gemacht, die Fahrplanauskunft dr Bahn im Internet (Hafas) programmmäßig anzusteueren und auszuwerten?
Ich habe versucht (sowohl mit Perl, als auch mit VB), der Lynx-Version (http://reiseauskunft.bahn.de/bin/detect.exe/bin/query.exe/dl) einfach die Parameter des Formulars zu posten, hat immer nur einen "HTML-Error" zurückgegeben.
Aber aha: Da wird offenbar eine Art Session-ID erzeugt:
<form ACTION="/bin/query.exe/dl?protocol=http:&ld=23&" ...
                                               ^^^^^
Der Wert von ld ändert sich bei jedem Aufruf. Also erstmal das Formular aufrufen und ld rausziehen. Denkste: Schon der Aufruf von http://reiseauskunft.bahn.de/bin/detect.exe/bin/query.exe/dl gibt nicht das Formular, sondern wieder den "HTML-Error" zurück. In jedem normalen Browser funktioniert es.
Die 'normale' Reiseauskunft unter http://reiseauskunft.bahn.de/bin/detect.exe/bin/query.exe/dkann ich zumindest aufrufen, posten habe ich noch nicht versucht, aber da parst man sich ja zu Tode.

Hat jemand Ahnung, woran das liegen könnte, oder andere Erfahrungen mit Hafas?

TIA

wunderwarzenschwein

  1. Hallo!

    ALSO:
    Eigentlich sollte man sowas nicht machen, kann aber ehrlich gesagt auf der Homepage nichts finden das es Verboten ist, abver ich denke das wird schon durch Gesetze verboten sein!

    Aber nichts desto trotz ist es eine interessante Aufgabe ;-)
    Ich habe mir das auch mal angeguckt, und ich meien es liegt an dem Parameter ident, der in de Form-Action steht. Wenn der fehlt bekommst Du einen Fehler, genauer gesagt:

    Suchergebnis konnte nicht intern zwischengespeichert werden.
    Eine neue Suche können Sie starten, indem Sie hier klicken.

    Der link hier enthhält folgendes:
    http://reiseauskunft.bahn.de/bin/query.exe/dn?protocol=http:&newrequest=yes

    Der Link führt wieder zu dem Formular, in das man die Daten eingeben soll. Wenn Du darauf klickst hat das Formular in der action wieder dieses ident, ist wahrscheinlich eine Art SessionID. Das heißt, Du mußt Dir als erstes mal diese SessionID besorgen, das am besten über eine Anfrage mit obigem Link. Daraus liest Du dann diese ident-Nummer aus, und schickst an das Script entsprechend der Form-Action die gewünschten Daten per Post an den Server, liest dann das Ergebnis auseinander und fertig. So sollte ws funktionieren, habe es aber nicht getestet.

    Ich empfehle das erstmal ganz stümperhaft zu probieren, indem Du den Quellcode kopierst, den Action-Pfad vervollständigst(http://...), das ganze auf deinem PC ausführst, dann verstehst Du das alles etwas besser!

    Erzähl mal obs funktioniert hat ;-)

    Grüße
    Andreas

    1. Hallo!

      Ein bischen googlen ist bei sowas nie verkehrt:
      http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&q=Fahrplanauskunft+schnittstelle+Bahn&meta=

      Da findest Du schon direkt auf der ersten Ergebnis-Seite 2 Seiten, die sowas ähnliches gemacht haben, halt nur nicht ausgewertet, das bleibt ggfs. Dir überlassen ;-)

      Es reicht schon die Form-Action zu übernehmen:

      http://reiseauskunft.bahn.de/bin/query.exe/dn

      damit funktioniert das direkt, ganz ohne Ident-Nummer...

      Grüße
      Andreas

      1. Da hatte ich gar nicht gemerkt das Du die ganze Zeit vom der Textversion gredet hast ;-)

        Mußt einfach

        http://reiseauskunft.bahn.de/bin/query.exe/dl

        als Form-Action für den POST Request nehmen und schon gehts!

        Grüße
        Andreas

        1. Hi,

          Mußt einfach
          http://reiseauskunft.bahn.de/bin/query.exe/dl
          als Form-Action für den POST Request nehmen und schon gehts!

          Genau das war der Fehler. Ich hatte vorher den falschen Link, nämlich http://reiseauskunft.bahn.de/bin/detect.exe/bin/query.exe/dl

          Das Formular kann ich nun aufrufen, mitdem Posten klappts noch nicht so ganz. Krieg ich aber auch noch hin.

          Danke

          wunderwarzenschwein

  2. Hat jemand Ahnung, woran das liegen könnte, oder andere Erfahrungen mit Hafas?

    Hallo, ich habe vor einigen Wochen einfach eine Mail an die Bahn geschrieben und folgenden Code-Schnipsel bekommen. Die Bahn möchte lediglich, dass "target=_blank" benutzt wird.

    HTH
    Hans-Jürgen

    <FORM ACTION="http://reiseauskunft.bahn.de/bin/query.exe/dn" NAME="formular" METHOD="POST" TARGET="_blank">
       <INPUT TYPE="hidden" NAME="datesel" VALUE="custom">
       <TABLE>
          <TR>
             <TD COLSPAN="2">
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsSA" VALUE="1" CHECKED>
                Bhf./Haltest. oder
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsSA" VALUE="2">
                PLZ/Ort, Straße Hnr.
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsSA" VALUE="4">
                PLZ/Ort, Point of Interest
             </TD>
          </TR>
          <TR>
             <TD>von:</TD>
             <TD>
                <INPUT TYPE="text" NAME="REQ0JourneyStopsSG">
             </TD>
          </TR>
          <TR>
             <TD COLSPAN="2">
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsDA" VALUE="1" CHECKED>
                Bhf./Haltest. oder
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsDA" VALUE="2">
                PLZ/Ort, Straße Hnr.
                <INPUT TYPE="radio" NAME="REQ0JourneyStopsDA" VALUE="4">
                PLZ/Ort, Point of Interest
             </TD>
          </TR>
          <TR>
             <TD>nach:</TD>
             <TD>
                <INPUT TYPE="text" NAME="REQ0JourneyStopsDG">
             </TD>
          </TR>
          <TR>
             <TD>Datum:</TD>
             <TD>
                <INPUT TYPE="text" NAME="REQ0JourneyDate">
             </TD>
          </TR>
          <TR>
             <TD>Uhrzeit:</TD>
             <TD>
                <INPUT TYPE="text" NAME="REQ0JourneyTime">
             </TD>
          </TR>
          <TR>
             <TD></TD>
             <TD>
                <INPUT TYPE="radio" NAME="REQ0HafasSearchForw" VALUE="1" STYLE="background-color:#cdcdcd;" CHECKED> Abfahrt
             </TD>
          </TR>
          <TR>
             <TD></TD>
             <TD>
                <INPUT TYPE="radio" NAME="REQ0HafasSearchForw" VALUE="0" STYLE="background-color:#cdcdcd;"> Ankunft
             </TD>
          </TR>
          <TR>
             <TD COLSPAN="2">
                <INPUT TYPE="submit" NAME="start" VALUE="Suchen">
             </TD>
          </TR>
       </TABLE>
    </FORM>