PHP JSON Objekt "importieren"

Das JSON Objekt liegt auf einem anderen Server.

Um es etwas konkreter zu machen : Google API / OAuth 2

Nach der Authentifizierung kann ich zb hier https://www.googleapis.com/oauth2/v2/userinfo?access_token=XXXX
Ein JSON Objekt abrufen.

Die Daten aus diesem JSOB Objekt hätte ich aber gerne in meinem Script auf meinem Server um sie in Variabel weiter zu verwenden.
 
Hmm, so ganz finde ich die Funktion in dem code nicht.
 
Damit bekomme ich es auch nicht hin..

Also den Token habe ich und mit einem Link kann man sich das Json Objekt auch anschauen.
Allerdings hätte ich die sachen wie z.b Name gerne in einer Variable um diesen dann weiter zu verwenden.
Ergänzung ()

Laut Google Documentation müsste ich diesen HTTP Request Header absenden, dann würde ich auch meine Daten bekommen

GET /oauth2/v2/userinfo HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: OAuth $token

​aber wie?
 
Zuletzt bearbeitet:
Was funktioniert denn an der geposteten Stack Overflow Lösung nicht? So viel kann doch bei den paar Zeilen gar nicht schief gehen. Verwendest du die letzte Version des Google API PHP Clients?

Um die Header bei einem Request definieren zu können, kannst du entweder HttpRequest (Beispiele darunter), oder aber auch bspw. cURL verwenden.
 
"Fatal error: Call to undefined method Google_Client::getUserInfo() in /var/customers/webs/pascaldev/oauth2/callback/index.php on line 25 Call Stack: 0.0002 679224 1. {main}() /var/customers/webs/pascaldev/oauth2/callback/index.php:0"

​bei der Stack Overflow lösung

cURL würde laut Dokumentation auch gehen, dachte aber damit wäre der cURL Browser gemeint

https://developers.google.com/youtu...ocol_oauth2?hl=de#OAuth2_Calling_a_Google_API
 
Hast du die getUserInfo Funktion in die entsprechende php-Datei (google-api-php-client/src/apiClient.php) gepackt?
 
Jap Google_Client::getUserInfo() ist trotzdem undefiniert.

 
Puh, schwierig.

Ich kann dich noch auf diese Seite verweisen. Wenn du hier nach getUserInfo suchst, findest du die Funktion, die sich in der letzten Client Version befindet (du scheinst diese offensichtlich nicht zu haben).

Eventuell klappt es, wenn du einfach diese irgendwo nach dem require_once in deinem Script hinzufügst und dann mit dem Token aufrufst.
 
Auf die schnelle fällt mir nur auf, dass in Deinem Code das hier fehlt:

PHP:
require_once '../../src/contrib/Google_Oauth2Service.php';

Den Pfad solltest Du Deinem Verzeichnis entsprechend anpassen.

Um das JSON-Object später in Deinem Script weiter zu verarbeiten, könnte man sowas machen:

PHP:
<?php
$json = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v2/userinfo?access_token='.$token), true);
print_r($json);
?>

json_decode() wandelt das json per default in ein objekt um, als array wirds für dich sicher einfacher zu verarbeiten sein, daher das "true" in json_decode(url, true).

Request Header kannst Du entweder mit stream_context_create() vorbereiten und dann an file_get_contents() anhängen oder Du nimmst die cURL lib dafür (sofern auf deinem server vorhanden).
 
Zuletzt bearbeitet:
hedsht schrieb:
Auf die schnelle fällt mir nur auf, dass in Deinem Code das hier fehlt:
Um das JSON-Object später in Deinem Script weiter zu verarbeiten, könnte man sowas machen:

PHP:
<?php
$json = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v2/userinfo?access_token='.$token), true);
print_r($json);
?>

json_decode() wandelt das json per default in ein objekt um, als array wirds für dich sicher einfacher zu verarbeiten sein, daher das "true" in json_decode(url, true).

File_get_contents war genau das was ich gebraucht habe.

Wenn ich $json jetzt mit print_r ausgebe ist alles gut, aber wenn ich auf eine Objekt im array zugreifen will zb so:

PHP:
$name = $json->name;echo "Hello " . $name . "<br>";

ist $name einfach leer.
 
weil das $json jetzt kein objekt mehr ist.

wenn du die objekt schreibweise bevorzugst, dann ...

PHP:
$json = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v2/userinfo?access_token='.$token));
print_r($json);

echo $json->name;

ansonsten per array gehts so ...


PHP:
$json = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v2/userinfo?access_token='.$token), true);
print_r($json);

echo $json['name'];
 
Hallo.
Ich brächte nochmal Hilfe.

json_decode() gibt mir ein stdClass Object zurück.

Allerdings habe ich Probleme auf die einzelnen Daten im Array zu zu greifen.

Das array:
Code:
stdClass Object ( [items] => Array ( [0] => stdClass Object ( [id] => XXXX [statistics] => stdClass Object ( [viewCount] => 722 [commentCount] => 0 [subscriberCount] => 12 [videoCount] => 19 ) ) ) )

mein Code:
PHP:
echo $ytdata->items[0]->id;    
echo $ytdata->items[0]->statistics['subscriberCount'];
echo $ytdata->items[0]->statistics['viewCount'];
 
dann setz den 2. Parameter auf true und du bekommst kein stdClass-Objekt mehr sondern ein Array.
 
Das es ein stdClass-Objekt ist, ist ja relativ egal. Es verarbeitet sich ja nahezu genauso wie ein Array.

Allerdings scheinen meine pfade zu den Daten falsch zu sein.

$ytdata->items[0]->statistics['viewCount'];

führt nicht dahin wo es hin soll.

genauso wenig wie

$ytdata->items[0]->statistics->{'viewCount'};
 
Zurück
Oben