J'essaie de créer une application serveur pour extraire régulièrement les données Google Analytics de mon propre compte GA. Remarque, il s'agit d'une application personnelle côté serveur accédant à mes propres données, par exemple il n'y a aucun utilisateur final accédant à cette application.
En tant que tel, j'ai enregistré mon application dans la Google API Console en tant qu'application de service , ce qui m'a donné un ID client et une clé privée . Je crois comprendre que les applications de service n'utilisent PAS Secret d'application et URL de redirection car il n'y a pas d'utilisateur final dans ce flux d'authentification de serveur à serveur. En effet, la console API Google ne m'a donné aucun secret et ne m'a pas demandé d'URL de redirection.
Malheureusement, je ne peux pas comprendre comment authentifier mon application de service dans Google PHP API client . Il existe une documentation complète sur l'authentification des applications Web avec un utilisateur final.
La documentation de Google suggère il est possible d'authentifier de serveur à serveur en signant une requête JWT avec la clé privée . Je n'arrive pas à comprendre comment faire dans l'API client PHP (bien que j'aie parcouru la source et qu'il y ait certainement un script qui signe une demande avec le Clé privée.)
Est-ce que j'ai râté quelque chose? Comment puis-je effectuer l'authentification pour une application de service avec ma clé privée et l'API client Google PHP?
Modifié pour plus de clarté
L'API Google Analytics V3 prend désormais en charge les jetons OAuth2 renvoyés par une demande JWT signée .p12. Autrement dit, nous pouvons maintenant utiliser l'API Analytics avec des comptes de service .
Tirant actuellement 4 ans de mesures quotidiennes, juste pour l'enfer.
Voici une rapide étape par étape:
Accédez à Google API Console et créez une nouvelle application
Dans l'onglet Services, actionnez le commutateur Google Analytics
Dans l'onglet API Access, cliquez sur Créez un ID client OAuth2.0
entrez votre nom, téléchargez un logo et cliquez sur Suivant
sélectionnez l'option Compte de service et appuyez sur Créer l'ID client
téléchargez votre clé privée
Vous êtes maintenant de retour sur la page API Access. Vous verrez une section intitulée Compte de service avec un ID client et Adresse e-mail
Copiez l'adresse e-mail (quelque chose comme #### @ developer.gserviceaccount.com)
Visitez votre GA Admin et ajoutez cet e-mail en tant qu'utilisateur à vos propriétés
C'est un must; vous obtiendrez des erreurs cryptiques sinon.
Obtenez la dernière --- Google PHP API client via Github
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
Rock 'n' roll (merci à tous pour des conseils sur les noms de classe mis à jour):
// 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);
solution originale ci-dessous
Il semble que, malgré une documentation ambiguë, la plupart des API Google ne prennent pas encore en charge les comptes de service , y compris Google Analytics. Ils ne peuvent pas digérer les jetons OAuth2 renvoyés par une demande JWT signée .p12. Donc, en ce moment, vous ne pouvez pas utiliser l'API Google Analytics V3 avec un compte de service.
Solution:
Dans la console API Google , créez une application client .
Suivez les étapes des exemples Google PHP Client API pour générer un
client_auth_url
En utilisant votreclient_id
,client_secret
etredirect_uri
Connectez-vous à Google en utilisant cURL. (Assurez-vous d'utiliser un fichier cookie!)
Ouvrez le
client_auth_url
En cURL et remplissez le formulaire. Assurez-vous de définircurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
etcurl_setopt($ch, CURLOPT_HEADER, 1);
carauthorization_code
Sera dans l'en-têteLocation:
De la réponse.En utilisant votre
client_id
,client_secret
,redirect_uri
Et le code d'activation de l'étape 4, envoyez une demande à la machine à jetons OAuth2 de Google . Assurez-vous d'incluregrant_type = "authorization_code"
Dans vos champs de publication.Hourra, vous avez maintenant un
refresh_token
Qui n'expire jamais, et unaccess_token
Fonctionnel! Envoyez une demande à la machine à jetons OAuth2 de Google avec votreclient_id
,client_secret
,redirect_uri
Etrefresh_token
Lorsque votreaccess_token
Expire et vous en obtiendrez un nouveau.
L'API Google PHP Client prend désormais en charge les comptes de service sur le tronc.
L'implémentation n'a pas encore été publiée, vous devrez donc checkout la dernière version du client PHP client.
J'ai préparé un exemple d'application qui montre comment vous pouvez utiliser des comptes de service pour accéder à l'API Google Prediction. Pour voir l'exemple, jetez un œil à examples/prediction/serviceAccount.php ou visitez: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples /prediction/serviceAccount.php
Si vous utilisez Google PHP API client alors allez dans Google API Console et cliquez sur API Access
à gauche.
Ensuite Create a Client ID
. Cela vous donnera le secret
et c'est là que vous définissez votre redirect URL
. Il ne vous donnera pas d'URL de redirection - c'est l'URL à laquelle l'application renvoie l'utilisateur après l'authentification.
Il existe autres méthodes d'authentification que vous pouvez consulter.
vous pouvez utiliser une bibliothèque php très utile GAPI (API Google Analytics PHP) pour accéder à Google Analytics sans OAuth. C'est facile utiliser.