19 berichten aan het bekijken - 1 tot 19 (van in totaal 19)
  • Q:
    Bijdrager
    Erwin

    Vraag over PHP Rest-Api

    Ik heb een vraag over een Rest-Api aanspreken in PHP.
    Waarbij ik hoop dat jullie me verder kunnen helpen.

    Van de site rijdendetreinen.nl heb ik toegang gekregen tot hun api waarmee je actuele vertrektijden kunt uitlezen van een willekeurig station in Nederland.
    Deze wil ik graag op mijn site laten zien, een voorbeeld is hier te zien:

    http://www.veenendaallijn.nl/scripts/VertrektijdenV2/

    Zoals te zien is wordt de api correct aangeroepen en de data uitgelezen.
    Alleen is het nog niet zoals het wezen moet.

    De code om de api aan te spreken is als volgt:

    <?php
    $url = “http://api.rijdendetreinen.nl/v2/json/vertrektijden?client=veenendaallijn&station=vndc&#8221;;
    $response = file_get_contents($url);
    echo $response;
    ?>

    Wat moet er nu nog verder gebeuren zodat de treintijden netjes worden getoond?

    Hoop dat iemand me helpen.

    Alvast bedankt!

    Bijdrager
    McPim

    Wat je retour krijgt in $response is in JSON formaat, met een JSON decode functie zet je dat om naar bruikbare variabelen en dan doe je ermee wat je wilt. Ik ben qua programmeren vooral thuis in Swift dus kan je niet aan de details qua PHP helpen, maar dan weet je waar je het ongeveer moet zoeken.

    http://php.net/manual/en/function.json-decode.php

    Bijdrager
    Shmoo

    Precies dat.. Wat je terugkrijgt is ruwe data in een json formaat.

    De bedoeling is dus dan je met PHP op zoek gaat in dat formaat naar de content die je wilt gebruiken en tonen op je pagina. Dat werkt ongeveer hetzelfde als een array.

    “bestemming”: “Rhenen”

    Met PHP ga je dan opzoek naar ‘bestemming’ en daar krijg je dan ‘Rhenen’ uit, je kunt dan Rhenen op de pagina plaatsen in een HTML tabel of wat dan ook.

    Bijdrager
    Shmoo

    Er zijn trouwens apps waar je die Rest API url in kunt vullen en dan krijg je een mooi overzichtelijke structuur van de data te zien. Op die manier kun je beter bij de juiste data komen. Nu zit je tegen een plat ruw bestand aan te kijken en is het lastig je weg te vinden.

    https://itunes.apple.com/nl/app/rested-simple-http-requests/id421879749?mt=12

    Bijdrager
    Erwin

    Bedankt!
    Dat er een app voor bestaat wist ik niet, daar ga ik eens mee aan de slag!

    Bijdrager
    TheBigZ
    Bijdrager
    TheBigZ

    Leuke site trouwens!

    Treinen uit Rotterdam

    Bijdrager
    Wyodor

    Om een idee te krijgen hoe het er uit ziet in een tabel, kijk hier :

    http://responsive.2kool4u.net/tech/json/php/

    Kopieer de code onderaan de pagina en vervang de eerste regel ( $string = etc. ) door de twee regels om de treininfo op te halen. Zo dus :

    $url = “http://api.rijdendetreinen.nl/v2/json/vertrektijden?client=veenendaallijn&station=vndc”;
    $string = file_get_contents($url);

    De tabel zal het in grote lijnen goed tonen. Verder aanpassen naar eigen smaak.

    http://responsive.2kool4u.net/tech/json/trein/

    Bijdrager
    Erwin

    Ik heb nu dit:
    Is dit goed?? Want ik krijg een wit scherm als ik dit probeer:

    <table border=”1″ style=”margin: 10px;”>
    <tfoot><tr><td colspan=3>Made by Me</td></tr></tfoot>
    <tbody>
    <?php
    $url = “http://api.rijdendetreinen.nl/v2/json/vertrektijden?client=veenendaallijn&station=vndc”;
    $string = file_get_contents($url);
    $json = json_decode($string, true);
    $keys = array_keys($json);
    for($i = 0; $i < count($json); $i++) {
    foreach($json[$keys[$i]] as $key => $value) {
    echo ‘<tr><td><b>’ . $key . ‘</b></td>’;
    if ( is_array($value) ) {
    $theCount = 1 ;
    if ( count($value) > 1 ) { $aCell = ‘<tr><td>+++</td>’; }
    foreach($value as $key2 => $value2 ) {
    if ( $theCount > 1 ) { echo $aCell ; }
    if ( is_array($value2) ) {
    foreach($value2 as $key3 => $value3 ) {
    echo ‘<td>’ . $key2 . ‘</td><td>’ . $value3 . ‘</td></tr>’ . “\n”;
    }
    } else {
    echo ‘<td>’ . $key2 . ‘</td><td>’ . $value2 . ‘</td></tr>’ . “\n”;
    $theCount = $theCount + 1;
    }
    }
    } else {
    echo ‘<td>—</td><td>’ . $value . ‘</td></tr>’ . “\n”;
    }
    }
    }
    ?>
    </tbody>
    </table>

    Bijdrager
    Wyodor

    Had ik ook.

    Zet de url tussen rechte aanhalingstekens, niet de gekrulde.

    Bijdrager
    Erwin
    Bijdrager
    Erwin

    Hij doet het! Bedankt

    Bijdrager
    Erwin

    Sorry voor deze topic-kick maar heb dit projectje weer eens opgepakt.

    Script staat nu hier on-line: http://0318webhosting.nl/wordpress/wp-content/plugins/vertrektijden/av.php

    Zoals je ziet wordt ALLE data geretourneerd, hoe kan ik ervoor zorgen dat er maar een gedeelte van de data wordt geretourneerd?
    (bijv. alleen bestemming & soort).

    De code die ik nu gebruik is nog steeds dezelfde als hierboven.

    Bijdrager
    Wyodor

    Waarom wakker liggen van wat er wordt teruggestuurd?

    Haal eruit wat je nodig hebt, zoals dit :

    http://responsive.2kool4u.net/tech/json/trein2/

    Hier de ruwe data als vergelijk :

    http://responsive.2kool4u.net/tech/json/trein/

    Bijdrager
    Erwin

    Ik weet wel hoe je de data ophaalt zoals in mijn voorbeeld is te zien.
    Maar ik weet alleen nog niet hoe je dan eruit haalt wat je nodig hebt en het mooi op een pagina neerzet zoals ook in jouw voorbeeld.
    (http://responsive.2kool4u.net/tech/json/trein2/)
    Het zal waarschijnlijk een klein stapje zijn, maar ik kan ‘m nog niet maken.

    Bijdrager
    Wyodor

    De treingegevens haal ik met een AJAX request op. Het JavaScript kan je zien in de broncode van de pagina. Net als het JavaScript met de interval en de css voor de opmaak.

    Dit is de php code van gettrain.php :

    http://responsive.2kool4u.net/tech/json/trein2/gettrain.txt

    Bijdrager
    Erwin

    Dank je! Dit ga ik eens proberen in de aankomende dagen.

    Bijdrager
    Erwin

    Het werkt inmiddels zoals hier is te zien op een klein dingetje na:

    http://0318webhosting.nl/wordpress/wp-content/plugins/vertrektijden/av2.php

    Ik wil graag het materieeltype laten zien, in de api staat dit erover:

    “vleugels”: [
    {
    “bestemming”: “Rhenen”,
    “mat”: [
    [
    “SGMM-3”,
    “Rhenen”,
    “2962”
    ]
    ],
    “stops”: []
    }
    ],

    Ik heb dit als volgt geprobeerd op de pagina te plaatsen:
    print_r ($vertrektijden[$i]->vleugels[mat]);

    Maar dan is dit de output wat op de pagina komt:
    Array ( [0] => stdClass Object ( [bestemming] => Uitgeest [mat] => Array ( [0] => Array ( [0] => SGMM-3 [1] => Uitgeest [2] => 2936 ) ) [stops] => Array ( ) ) )

    Bijna goed dus, maar er moet -in dit geval- alleen SGMM-3 worden getoond, meer niet.
    Hoe moet ik dan doen en wat doe ik fout?

    Alvast bedankt!

    Bijdrager
    Wyodor

    vleugels[mat] is een array.
    Je moet daar dan doorheen lussen om de waardes eruit te krijgen.

    Voorbeeld hoe dat moet staat in je post van 13 januari

19 berichten aan het bekijken - 1 tot 19 (van in totaal 19)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.