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”;
$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!

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

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.

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

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

Tip: kijk eens naar Guzzle.

http://docs.guzzlephp.org/

https://www.chapterthree.com/blog/building-rest-api-clients-php-easy-way

Leuke site trouwens!

Treinen uit Rotterdam

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&amp;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/

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>

Had ik ook.

Zet de url tussen rechte aanhalingstekens, niet de gekrulde.

Gedaan maar nog steeds een wit scherm:

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

Hij doet het! Bedankt

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.

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/

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.

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

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

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!

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