Völliger Anfänger und APIs einbinden

  • Hallo zusammen,


    Kurz als Intro.. ich bin ein blutiger anfänger..

    .. ich kann leicht etwas HT;ML .. habe vor Monaten etwas mit PHP gewurstelt.. aber sonst bin ich ziemlich unbegabt :)


    ...und jetzt versuche ich eine Seite zu erstellen, welche mir eine Abfrage aufarbeitet und auf einer Seite darstellt.. für mich durch reines googlen ein Ding der Unmöglichkeit :(

    kann mir jemand helfen, wie ich das genau umsetzen muss?


    Vielleicht einmal die Ausgangslage:

    Ich möchte für meine Bahnhof-Haltestelle den aktuellen Abfahrtsplan für die nächsten 5 Abfahrten in meinem Browser darstellen. Sprich: Rufe ich das HTML (?) File auf, geht es mir die 5 nächsten Abfahrten Stadteinwärts holen.. und stellt diese mir verständlich und hübsch aufbereitet dar. Von der Logik nicht so schwierug.


    Die Schnittstelle ist hier beschrieben: https://opentransportdata.swis…ftsanzeiger/#API_Explorer


    Und ich möchte folgenden StopEventRequest Request senden:

    StopPointRef 8503147 UND 8591065 (ich glaube es braucht hier 2 aufrufe!, ist das so?)

    DepArrTime "jetzt/aktuelle Aufrufzeit"

    NumberOfResults "viele?" 20?

    StopEventType departure

    IncludePreviousCalls false

    IncludeOnwardCalls false

    IncludeRealtimeData true


    Aus der Antwort interessiert mich dann besonders:

    Generell - einmalig interessirt mich der name der Haltestelle.. also

    <StopEvent><ThisCall><CallAtStop><StopPointName><Text> grndsätzlich halt der Name der Haltestelle, den ich im Request als ID mitgeschickt habe.

    Aus den 5 StopEventResult interessieren mich vorallem/nur forlgedes

    <ThisCall><CallAtStop><ServiceDeparture><TimetabledTime>

    <ThisCall><CallAtStop><ServiceDeparture><EstimatedTime>

    <Service><Mode><PtMode>tram</PtMode>

    <Service><Mode><Name><Text>Tram</Text>

    <Service><PublishedLineName><Text>

    <Service><DestinationText><Text>

    und dann noch eine schwierige frage: mich interessieren nur die verbindungen "stadteinwärts".. bzw für die tramlinie 12 "zum flughafen"

    mit <DirectionRef> aknn man das glaube ich nicht voll abschliessend sagen...



    Die Darstellung am Schluss im Browser sollte dann so aussehen:

    Titel: Departure Board for "HALTESTELLENAME 1" und "HALTESTELLENAME 2)

    Tabelle mit folgenden Einträgen: (sortiert nach nächster Abfahrt: nächstes Transportmittel zuoberst

    - ICON über Verkehrsmitteltyp, abgeleitet von RailSubmode

    - Verkehrsmitteltyp ausgeschriben aus Mode/Name/Text

    - Linie abgeleitet von PublishedLineName/Text

    - Abfahrtzeit von <EstimatedTime> wenn vorhanden, sonst TimetabledTime>

    - Abfahrtszeit von TimetabledTime>

    - Verspätung berechnet von den 2 obigen Abfahrtszeiten

    - Abfahrt in XX Minuten berechnet von der obigen Abfahrtszeit und aktueller Zeit


    wie ihr seht ist das nicht so einfach.. und ich bin völlig überfragt..

    wer kann helfen? .. wer nimmt den Challeng an? :)


    danke und grüsse!

  • ok.. ist schon mal ein anfang.. und mein ers ter versuch..

    warum kriege ich hier nix zurück? was mache ich falsch?


    <?php


    date_default_timezone_set("Europe/Zurich");

    $zeit_aktuell = date('Y-m-d') . "T" . date('H') . ":" . date('i') . ":" . date('s') . "\n";

    $API_key = 'möchte ich hier nicht public machen';

    $post_url = 'https://api.opentransportdata.swiss/trias';

    $haltestelle = 8591271;



    echo $haltestelle;

    echo "<br>";

    echo $zeit_aktuell;

    echo "<br>";

    echo $API_key;

    echo "<br>";

    echo $post_url;

    echo "<br>";


    $xml_request = '<?xml version="1.0" encoding="UTF-8"?>

    <Trias version="1.1" xmlns="http://www.vdv.de/trias" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <ServiceRequest>

    <siri:RequestTimestamp>' . $zeit_aktuell . '</siri:RequestTimestamp>

    <siri:RequestorRef>EPSa</siri:RequestorRef>

    <RequestPayload>

    <StopEventRequest>

    <Location>

    <LocationRef>

    <StopPointRef>' . $haltestelle . '</StopPointRef>

    </LocationRef>

    <DepArrTime>' . $zeit_aktuell . '</DepArrTime>

    </Location>

    <Params>

    <NumberOfResults>10</NumberOfResults>

    <StopEventType>departure</StopEventType>

    <IncludePreviousCalls>false</IncludePreviousCalls>

    <IncludeOnwardCalls>false</IncludeOnwardCalls>

    <IncludeRealtimeData>true</IncludeRealtimeData>

    </Params>

    </StopEventRequest>

    </RequestPayload>

    </ServiceRequest>

    </Trias>';


    echo file_get_contents('https://api.opentransportdata.swiss/trias', false, stream_context_create([

    'http' => [

    'method' => 'POST',

    'header' => 'Authorization: Basic ' . $API_key . ,

    'header' => "Content-type: 'Content-Type: text/xml',

    'content' => $xml_request,

    ]

    ]));


    ?>

  • ich habe den spass mitlerweile mit curl versucht:

    $post_request = curl_init();

    curl_setopt($post_request, CURLOPT_URL, "https://api.opentransportdata.swiss/trias");

    curl_setopt($post_request, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));

    curl_setopt($post_request, CURLOPT_HTTPHEADER, array('Authorization: Basic XXXX'));

    curl_setopt($post_request, CURLOPT_POST, 1);

    curl_setopt($post_request, CURLOPT_POSTFIELDS, $xml_post);

    curl_setopt($post_request, CURLOPT_RETURNTRANSFER, 1);

    $post_response = curl_exec($post_request);

    curl_close($post_request);


    was ich nicht hinkriege, ist dass ich die response irgendwie visualisieren kann


    echo $post_response;

    print_r($post_response);


    die 2 machen nix.. jemand eine ahnung?