Ich versuche, eine Serveranwendung zum routinemäßigen Abrufen von Google Analytics-Daten von meinem eigenen GA) Konto zu erstellen. Beachten Sie, dass es sich um eine persönliche, serverseitige Anwendung handelt, die auf meine eigenen Daten zugreift, dh Es gibt keinen Endbenutzer, der auf diese Anwendung zugreift.
Als solches habe ich meine Anwendung in der Google API Console als Dienstanwendung registriert, die mir eine Client-ID und ein privater Schlüssel . Nach meinem Verständnis verwenden Dienstanwendungen NICHT Application Secret und Redirect URL , da sich auf diesem Server kein Endbenutzer befindet. Ablauf der Serverauthentifizierung. Die Google API Console hat mir in der Tat kein Geheimnis verraten und mich nicht zur Eingabe einer Weiterleitungs-URL aufgefordert.
Leider kann ich nicht herausfinden, wie ich meine Dienstanwendung innerhalb von Google PHP Client API authentifizieren kann. Es gibt eine umfangreiche Dokumentation zur Authentifizierung von Webanwendungen mit einem Endbenutzer.
Die Dokumentation von Google schlägt vor, Server-zu-Server-Authentifizierung durch Signieren einer JWT-Anfrage mit dem privaten Schlüssel durchzuführen. Ich kann einfach nicht herausfinden, wie ich mit der PHP Client-API vorgehen soll (obwohl ich die Quelle durchsucht habe und es definitiv ein Skript gibt) unterschreibt eine Anfrage mit dem privaten Schlüssel.)
Vermisse ich hier etwas? Wie kann ich eine Authentifizierung für eine Dienstanwendung mit meinem privaten Schlüssel und der Google PHP Client-API durchführen?
Der Übersichtlichkeit halber bearbeitet
Google Analytics API V3 unterstützt jetzt OAuth2-Token, die von einer von P12 signierten JWT-Anfrage zurückgegeben werden. Das heißt, wir können jetzt die Analytics-API mit Dienstkonten verwenden.
Derzeit werden 4 Jahre lang täglich Messdaten abgerufen, nur zum Teufel.
Hier ist eine kurze 'n' schmutzige Schritt-für-Schritt-Anleitung:
Gehen Sie zu Google API Console und erstellen Sie eine neue App
Aktivieren Sie auf der Registerkarte Services den Schalter Google Analytics
Klicken Sie auf der Registerkarte API-Zugriff auf Erstellen Sie eine OAuth2.0-Client-ID
geben Sie Ihren Namen ein, laden Sie ein Logo hoch und klicken Sie auf Weiter
wählen Sie die Option Dienstkonto und drücken Sie Kunden-ID erstellen
laden Sie Ihren privaten Schlüssel herunter
Jetzt sind Sie wieder auf der Seite API Access. Sie sehen einen Abschnitt namens Dienstkonto mit einer Kunden-ID und E-Mail-Adresse
Kopieren Sie die E-Mail-Adresse (etwa #### @ developer.gserviceaccount.com)
Besuchen Sie Ihren GA Admin und fügen Sie diese E-Mail als Benutzer zu Ihren Eigenschaften hinzu
Das ist ein Muss; Sie werden sonst kryptische Fehler bekommen.
Holen Sie sich die neuesten Google PHP Client API über Github
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
Rock 'n' Roll (danke an alle für Tipps zu aktualisierten Klassennamen):
// api dependencies
require_once(PATH_TO_API . 'Google/Client.php');
require_once(PATH_TO_API . 'Google/Service/Analytics.php');
// create client object and set app name
$client = new Google_Client();
$client->setApplicationName(APP_NAME); // name of your app
// set assertion credentials
$client->setAssertionCredentials(
new Google_Auth_AssertionCredentials(
APP_EMAIL, // email you added to GA
array('https://www.googleapis.com/auth/analytics.readonly'),
file_get_contents(PATH_TO_PRIVATE_KEY_FILE) // keyfile you downloaded
));
// other settings
$client->setClientId(CLIENT_ID); // from API console
$client->setAccessType('offline_access'); // this may be unnecessary?
// create service and get data
$service = new Google_Service_Analytics($client);
$service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
Original Workaround unten
Trotz der mehrdeutigen Dokumentation scheint die meisten Google-APIs unterstützen noch keine Dienstkonten , einschließlich Google Analytics. Sie können keine OAuth2-Token verarbeiten, die von einer .p12-signierten JWT-Anforderung zurückgegeben wurden. Ab sofort können Sie Google Analytics API V3 nicht mit einem Dienstkonto verwenden.
Workaround:
Erstellen Sie in der Google API-Konsole eine Clientanwendung .
Befolgen Sie die Schritte in den Google PHP Client API Beispielen, um einen
client_auth_url
Mit Ihremclient_id
,client_secret
Zu generieren. , undredirect_uri
Melden Sie sich bei Google mit cURL an. (Verwenden Sie unbedingt eine Cookie-Datei!)
Öffnen Sie den
client_auth_url
In cURL und füllen Sie das Formular aus. Stellen Sie sicher, dass Siecurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
undcurl_setopt($ch, CURLOPT_HEADER, 1);
so einstellen, dassauthorization_code
ImLocation:
- Header der Antwort steht.Senden Sie mit Ihrem
client_id
,client_secret
,redirect_uri
Und dem Aktivierungscode aus Schritt 4 eine Anfrage an Googles OAuth2-Token-Computer . Stellen Sie sicher, dass Siegrant_type = "authorization_code"
In Ihre Post-Felder einfügen.Hurra, Sie haben jetzt einen
refresh_token
, Der niemals abläuft, und einen funktionierendenaccess_token
! Senden Sie eine Anfrage an Googles OAuth2-Token-Maschine mit Ihremclient_id
,client_secret
,redirect_uri
Undrefresh_token
, Wenn Ihraccess_token
Läuft ab und Sie erhalten einen neuen.
Das Google-API PHP Client unterstützt jetzt Dienstkonten für Amtsleitungen.
Die Implementierung wurde noch nicht veröffentlicht, daher müssen Sie checkout die neueste Version des PHP client.
Ich habe eine Beispielanwendung erstellt, die zeigt, wie Sie mithilfe von Dienstkonten die Google Prediction-API aufrufen können. Schauen Sie sich das Beispiel unter examples/prediction/serviceAccount.php an oder besuchen Sie: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples) /prediction/serviceAccount.php
Wenn Sie Googles PHP Client API verwenden, gehen Sie zu Google API Console und klicken Sie auf API Access
links.
Dann Create a Client ID
. Das gibt dir das secret
und hier stellst du dein redirect URL
. Sie erhalten keine Weiterleitungs-URL - das ist die URL, an die die App den Benutzer nach der Authentifizierung zurücksendet.
Es gibt andere Authentifizierungsmethoden die Sie anschauen können.
sie können eine sehr nützliche PHP-Bibliothek verwenden GAPI (Google Analytics API PHP Interface)), um ohne OAuth auf Google Analytics zuzugreifen. Es ist einfach benutzen.