Google Analytics-API V3 / OAuth 2

8
Ich habe verzweifelt versucht, das selbst herauszufinden, und wollte mit dieser Frage nicht zu SO kommen, aber ich bin am Ende meiner Weisheit (nein danke an die api / oauth-Doktoren).

>

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

zurück

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;

%Vor%

Die Inhaltsparameter müssen in einer einzigen Zeile stehen.

Der obige Code gibt mein access_token und refresh_token im JSON-Format

zurück

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;

%Vor%

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;

%Vor%

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 werden     
bmorenate 13.12.2012, 15:02
quelle

3 Antworten

13

Hier 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 .

    
bmorenate 14.12.2012, 22:03
quelle
10

Ich habe heute eine 403 bekommen und die Ursache gefunden: In der get -Funktion habe ich die Konto-ID anstelle der Profil-ID verwendet. Die Umstellung auf die Profil-ID hat es für mich behoben.

    
Spinal 03.04.2013 13:51
quelle
0

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);

    
Rohit Jindal 23.06.2015 06:25
quelle