curl Anfrage in php Liste

Meteorologe

Ensign
Registriert
Aug. 2006
Beiträge
254
Hallo,

ich wollte auf einer Seite, die abrufenden Daten von der Seite HIER , auf meiner Seite übersichtlicher darstellen. Deshalb habe ich versucht, diese mit

abzurufen. Soweit, so gut?!. Die Ausgabe wird mir dann als reine Textausgabe ausgegeben.
Diese Textausgabe wollte ich filtern und übersichtlicher in meiner Tabelle gestalten, indem ich in meinem php Script folgendes gemacht habe (vereinfacht dargestellt):

<?php
$journeys = $arr["look"]["trains"];
?>
<html>
<th>Zug</th>
$journey = $journeys[$i];


$ziel = $journey["name"];
<td><?= $ziel ?></td>
</html>

Leider wird mir auf meiner Seite weiterhin nur der komplette Ausgabetext (als Fließtext) angezeigt, ohne Filterung oder Sortierung in die Tabelle.
Ist eventuell schon der curl Befehl falsch?

(Ausgabe Struktur im Terminal)
Bildschirmfoto 2022-10-24 um 22.13.57.png
 
Danke für deine Antwort.

So sieht nun das ganzes php Script aus:

PHP:
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://zugradar.oebb.at/bin/query.e...tonly|yes|zugposmode|2|maxnumberoftrains|500|");

$res = json_decode($res, true);

$journeys = $res["look"]["trains"];

?>

<html>
<head>
<title>AB</title>
<link rel="stylesheet" href="pure-0.6.2/pure-min.css" />
<link rel="stylesheet" href="style.css" />
</head>

<body>

<table class="pure-table">
<thead>
<tr>
<th>Zugname1</th>
</tr>
</thead>
<tbody>
<?php for ($i = 0; $i < count($journeys); $i++) { ?>
<tr>
<?php

$zugname = $journeys["name"];

?>
<td><?= $zugname ?></td>

</tr>
<?php } ?>
</tbody>
</table>
</body>
</html>

Ergebnis ist, dass nun nur noch der Tabellenname „Zugname1“ auftaucht und keine 1:1 Ausgabe in Form eines Fließtextes . Schon mal gut.
Allerdings wird leider auch kein Ergebnis ausgegeben :/
Irgendwo hat sich bei mir ein Fehler eingeschlichen oder es fehlt noch etwas entscheidendes bzw. ich habe einen Fehler gemacht, welchen ich nicht sehe.
 
Zuletzt bearbeitet:
Codetags bitte :-)

Und Du hast einen Syntaxfehler in der Schleife. Wenn Du indizierst über i von 0 bis Ende, dann mußt Du auch den Index in $journeys angeben.

Ich schlage aber vor, foreach($train in $Journeys) zu basteln. Dann ist $Train in jeder Interation das jeweilige Element in der Liste und Du sparst Dir den Overhead für $i und den Zugriff über $journeys[$i].
 
Also im Grunde wie zuvor?:

PHP:
        <?php for ($i = 0; $i < count($journeys); $i++) { ?>   
          <tr>
            <?php
            $journey      = $journeys[$i];
          
          
            $zugname         = $journey["trains"];

            ?>
            <td><?= $zugname                  ?></td>

          </tr>
        <?php } ?>

Die Ergänzung von „$journey = $journeys[$i];“ hatte keine Änderung im Ergebnis?!


Sorry, wenn ich das foreach aktuell „überspringe“, aber ich bin eben dabei, mich in php einzuarbeiten und habe ein „einfaches?“ Projekt raus gesucht mit ein paar Zwischenschritten. Wenn das Hauptproblem funktioniert, dann kommt das nächste Lernkapitel, foreach ;)
 
Zwei Probleme, die mir erst beim Nachstellen aufgefallen sind:
1. Du mußt CURLOPT_RETURNTRANSFER aktivieren. Sonst hast Du keine Daten.
2. json_decode will UTF8. Die Website liefert aber ANSI. Also muß ein iconv drüber.
Plus, Du hast einen "Bug" in json_decode(). in $Res steht noch nix drin, was soll also json_decode($res) leisten?

Proof of concept:
PHP:
<?php
$ch = curl_init();
 curl_setopt_array( $ch, array(
     CURLOPT_URL => "http://zugradar.oebb.at/bin/query.exe/dny?look_minx=9752564&look_maxx=14965576&look_miny=46591549&look_maxy=49097815&tpl=trains2json&look_productclass=15&look_json=yes&performLocating=1&look_nv=get_zntrainname|no|attr|81|get_rtonly|yes|zugposmode|2|maxnumberoftrains|500|",
      CURLOPT_RETURNTRANSFER => true
 ));
$jsonData = curl_exec($ch);
if(curl_error($ch))
{
    echo curl_error($ch);
}
else
{
$res = json_decode(iconv("windows-1252","utf-8",$jsonData), false);
if($res === NULL)
{
echo json_last_error_msg();
    }
foreach($res->look->trains as $train)
{
 echo $train->name;
}
}
?>
Getestet auf php81 mit curl, json und iconv extensions.
Ich habe ein paar minimale errorhandler hinzugefügt, damit man sieht, wenn was nicht paßt und nicht nur nichts (oder nichts Richtiges) passiert.
Iconv sollte auch durch mbstring* ersetzt werden können, hab ich aber nicht nochmal geschaut.
 
  • Gefällt mir
Reaktionen: Meteorologe
Vielen herzlichen Dank :) - Es funktioniert^^ - Und das php script sieht sogar nun logisch/verständlich aus, mit welchem ich sehr gut arbeiten kann.
 
  • Gefällt mir
Reaktionen: Iqra
Zurück
Oben