PHP PHP Array ausgeben

ClocxHD

Lt. Junior Grade
Registriert
Aug. 2014
Beiträge
376
Hallo,

vorab mein Code:
PHP:
<?php
    $curl = curl_init();

    $auth = "oauth:geheim";

    $headers = array();
    $headers[] = 'Authorization: OAuth ' .$auth;

    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => $headers,
        CURLOPT_URL => 'https://api.twitch.tv/kraken/feed/clocxhd/posts?limit=1'
    ));

    $response = curl_exec($curl);

    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $body = substr($response, $header_size);

    foreach (json_decode($body) as $item) {
        print_r($item[0]);
    }
?>

Damit versuche ich, das Array, dass ich mittels Curl bekomme, auszugeben.
Dieses Array sieht so aus:
5ef1320e13.png

Jedoch erhalte ich mit dieser foreach-Schleife folgende Ausgabe:
Code:
1fstdClass Object ( [id] => 623128471471977695 [created_at] => 2016-08-23T18:41:35Z [deleted] => [body] => Und noch ein Test. D: [emotes] => Array ( ) [embeds] => Array ( ) [reactions] => stdClass Object ( ) [user] => stdClass Object ( [display_name] => ClocxHD [_id] => 62312847 [name] => clocxhd [type] => user [bio] => [created_at] => 2014-05-08T19:09:19Z [updated_at] => 2016-08-23T19:01:14Z [logo] => [_links] => stdClass Object ( [self] => https://api.twitch.tv/kraken/users/clocxhd ) ) [comments] => stdClass Object ( [_total] => 0 [_cursor] => [comments] => Array ( ) ) [permissions] => stdClass Object ( [can_reply] => [can_moderate] => [can_delete] => ) )

Meine Fragen:
1. Woher kommt das "1f" ganz am Anfang?
Das habe ich nur, wenn ich die foreach-Schleife nutze.

2. Wie komme ich an die Pfade wie posts --> body etc.?
Bei allem, was ich versuche, erhalte ich nur als Ausgabe "1f"

LG,
ClocxHD
 
Hmm, warum nimmst du $item[0] bei print_r? Sollte das nicht direkt das Item sein?
Falls du wissen willst, was bei dem JSON rauskommt: print_r(json_decode($body))
Was du wahrscheinlich eher willst, ist vor allem json_decode($body,true) (siehe Dokumentation).

Wenn du es dann in der richtigen Reihenfolge hast, dann kommst du an den Body entweder via $decoded->posts[$i]->body (assoc=false) oder $decoded["posts"][0]["body"] zugreifen.

Woher das 1f kommt: Keine Ahnung, entweder eine 1 und ein f oder ein 1f (1.0f). Meine Vermutung: "1" von _cursor und "f" von _topic.
 
Stimmt, danke, jetzt funktioniert das schon mal.

Nur wie bekomme ich das 1f weg?
Ich benötige nur das Array "posts".

Denn derzeit sieht die Ausgabe so aus:
"1fUnd noch ein Test. D:"

Der Code:
PHP:
<?php
    $curl = curl_init();

    $auth = "oauth:geheim";

    $headers = array();
    $headers[] = 'Authorization: OAuth ' .$auth;

    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => $headers,
        CURLOPT_URL => 'https://api.twitch.tv/kraken/feed/clocxhd/posts?limit=3'
    ));

    $response = curl_exec($curl);

    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $body = substr($response, $header_size);

    foreach (json_decode($body, true) as $item) {
        echo $item[0]["body"];
    }
?>

Und das zweite "Problem":
Jetzt habe ich in der CURL-URL das Limit auf 3 erhöht.
Die JSON-Ausgabe ist jetzt so:
06bead8fbd.png

Jedoch wird auch nur das erste Objekt im foreach ausgegeben.
 
Verstehst du, was dein Code macht? Ich glaub nicht. Woher hast du den Quatsch mit [0]? Mach den weg, dann wird einiges klarer.

Code:
$response=jsond_decode($body);

foreach($response->posts as $post){
echo "Beginn";
print_r($post);
echo "Ende";
echo "Body Beginn";
print_r($post->body);
echo "Body Ende";
}

Falls dein Code etwas macht, was du nicht verstehst, lass es Schritt für Schritt machen.
 
Danke, habe es jetzt hinbekommen.

Noch eine Frage:
Von der API bekomme ich Timestamps in folgendem Format: "2016-07-13T19:10:01Z".
Was für ein Format ist das?
Würde dieses nämlich gerne in d.m.Y, H:i:s umwandeln.
 
das ist ISO 8601.

dann in etwa so zum konvertieren:
PHP:
$date = DateTime::createFromFormat(DateTime::ISO8601, $deinTimestamp);
echo $date->format('d.m.Y, H:i:s');
 
Zurück
Oben