Ich arbeite in PHP und versuche, die Klassen Google_Client
und AnalyticsService
zu vermeiden, indem ich REST für die Methode analytics.data.ga.get
verwende.
STEP #1: Create an API Project for a Web Application
Ich gehe zur API-Konsole und erstelle ein Projekt mit Analyseservices und erhalte eine OAuth-Client-ID und ein Kennwort.
Ich habe den Eindruck, dass ich eine Kunden-ID für eine installierte Anwendung oder ein Web-Anwendung , weil ich den ersten Token-Handshake manuell durchführe. Bitte korrigieren Sie mich, wenn ich falsch liege.
Ich erstelle eine Client-ID für Webanwendungen und erhalte meine Client-ID xxxxxxxxxxxxxx.apps.googleusercontent.com
, Clientgeheimnis yyyyyyyyyyyyyyy
und meine Weiterleitungs-URI ist http://localhost:9002
STEP #2: Request initial API access
Ich gebe diesen Link ein; https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=http://localhost:9002&scope=https://www.googleapis.com/auth/analytics.readonly&access_type=offline
Das access_type=offline
ist, weil ich REST benutze, und erwarte nicht, dass "der Benutzer" (ich) jedes Mal, wenn ich ein aktualisiertes Token brauche, manuell mit Weiterleitungen / Popups klarkommt.
Die obige Anfrage gibt http://localhost:9002?code=4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI
Code 4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI
ist meine Erlaubnis, den API-Token anzufordern.
STEP #3: Request First Token
Wegen der IT-Probleme meines Unternehmens muss ich PHP 5.2.17 verwenden und habe keinen Zugang zu PHP cURL, also verwende ich file_get_contents
und stream_context_create
.
Das erste Token wird mit einem PHP file_get_contents()
angefordert;
Die Inhaltsparameter müssen in einer einzigen Zeile stehen.
Der obige Code gibt mein access_token
und refresh_token
im JSON-Format
string(195) "{ "access_token" : "ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "1/8tXvdUKcSEcaaxVqqqqqqqqqqqqqoYpj2KSS9qwWI" }"
Das Aktualisierungstoken muss ich an einem sicheren Ort aufbewahren, wie in einer DB oder einer geschützten txt-Datei, die aufgerufen wird, wenn mein access_token abgelaufen ist.
STEP #4: Request Analytics Data
Nun, von dem, was ich verstehe, bin ich bereit zu rollen und sollte in der Lage sein, meine access_token
zu verwenden, um Anfragen an https://www.googleapis.com/analytics/v3/data/ga
zu stellen.
Ich tue dies, indem ich diese Anfrage sende;
%Vor% Diese Anfrage gibt einen 401 Unauthorized
Fehler zurück. Ich nehme an, dass meine Anfrage korrekt erstellt wurde und die Verbindung zu https://www.googleapis.com/analytics/v3/data/ga
herstellt.
Auch, nach diesem Dokument Volle Quote bekommen kann ich machen die Anfrage mit dem access_token
in der URL wie folgt;
Diesmal erhalte ich 403 error
, wobei google die Antwort User does not have sufficient permissions for this profile
enthält.
QUESTION #1
Fehle ich etwas in der API-Konsole oder einen Prozess bei der Token-Erfassung? Ich gehe davon aus, dass ich das nicht bin, weil ich letztendlich das access_token=ya29
und das Refresh Token erwerbe.
QUESTION #2
Vielleicht bin ich komplett davon ausgegangen, dass ich das mit einfachen https-Anfragen machen kann? Muss ich die Klassen Google_Client
und AnalyticsService
verwenden? Ich denke nicht, dass das der Fall ist, aber vielleicht liege ich falsch.
QUESTION #3
Muss ich einen "Schlüssel" in meiner Anfrage verwenden?
&key=bbbbbbbbbbbbbbbb
QUESTION #4
Mit PHP 5.2.17 verpasse ich etwas? (neben 5.3 oder 5.4 selbst)
Zum Beispiel sollte der Header in einigen Versionen von PHP in stream_context_create
in einem Array und nicht in einem String wie diesem stehen;
Aber ich denke nicht, dass das in meinem Fall ein Problem ist. Ich bin nur neugierig, ob diese HTTP-Anfrage auf eine andere Art und Weise gebildet werden muss (ohne Curl zu verwenden).
Alle Einsichten und Gedanken würden sehr geschätzt werdenHier ist mein schlauer Fehler, der mir beinahe einen Herzinfarkt beschert hätte.
Normalerweise mache ich meine Entwicklungsarbeit in Chrome. Und mein Chrome-Browser wurde in meinem Google Mail-Konto [email protected]
angemeldet. Mein Analytics-Account, der sich unter meinem [email protected]
befindet, war jedoch in FireFox geöffnet (versuche nicht zu laut zu lachen).
Ich bin nicht 100% sicher, dass das stimmt, aber ich denke, das ist der allgemeine Ablauf. Als ich STEP #2: Request initial API access
erstellt habe, habe ich dies in meinem Chrome-Browser getan. Der Endpunkt https://accounts.google.com/o/oauth2/auth
hat mein [email protected] autorisiert. Und meine STEP # 4-API-Anfrage https://www.googleapis.com/analytics/v3/data/ga
suchte nach einem Analyseprofil unter meinem [email protected]. Was natürlich nicht existiert.
Ich habe buchstäblich 15 Stunden dafür verschwendet. Das ist dümmer als zu versuchen, ein Update zu beheben ... und vergessen, den Cache zu leeren.
Entschuldige, dass du deine Zeit verschwendet hast.
BEARBEITEN REFRESH TOKENS
Ich habe wieder einmal Probleme mit dieser API festgestellt und herausgefunden, dass GA Refresh Tokens widerruft, wenn zu viele verschiedene Clients das Token verwenden, zumindest glaube ich, dass das das Problem war.
Weitere Informationen finden Sie hier .
Es könnte ein Problem mit der CURL-Anfrage sein. Fügen Sie in GoogleAnalyticsAPI.class.php > class Http > function curl (around line 720)
eine weitere Option hinzu, um zu verhindern, dass CURL das Zertifikat des Peers überprüft:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
Tags und Links google-analytics google-analytics-api