8
votes

Demander des données Google Analytics à partir d'un serveur local

Je veux écrire un script PHP qui importe des données statistiques Web de GA. Le script est accessible via une touche frontale Web (pour déclencher l'importation) et réside sur un serveur local (127.0.0.1).

 Entrez la description de l'image ici

Comme je l'ai compris à partir de la documentation, c'est qu'il existe deux options d'authentification et d'utilisation de l'API de base:

  1. clé API - accède uniquement à des statistiques
  2. oauth2 - autorisation complète

    Si je comprends correctement les mécanismes de Oauth2 correctement, ce n'est pas une option dans mon scénario car je ne peux pas spécifier une URL de rappel. Les solutions hacky me viennent à l'esprit - comme l'établissement d'une authentification de profil Web directement connectant à GA à partir du navigateur, puis récupérant les données par JavaScript et la nourriant au script d'importation - mais je préférerais m'abstenir de telles solutions. De plus, étant donné que l'interaction du navigateur déclenchant le processus d'importation pourrait être substituée par un travail cron à l'avenir.

    La clé API semble être exactement ce que je veux, mais la demande d'obtention du navigateur échoue.

    Demande d'obtention: xxx

    réponse: xxx < / Pré>

    L'URL si devrait aller bien. Sauf pour le paramètre clé, il est identique à celui généré avec http: // ga-dev -Tools.Appot.com/explorer/ qui fonctionne également (Aouth2 est utilisé dans ce cas). La clé API est fraîche.

    puis générer une nouvelle clé d'API me confronte avec le prochain inconvénient qui est que, apparemment, la clé n'est valable que pour une journée.


    À la fin de la journée, ma question est la suivante:

    est-il possible d'aller chercher des données dans le scénario décrit ci-dessus sans avoir à authentifier manuellement ou générer des touches d'API sur une base quotidienne?


2 commentaires

Jetez un bon coup d'œil sur the Méthodes d'autorisation disponibles. Il y en a 2 qui devrait fonctionner pour vous. Server Web Server et Comptes de service . Avec le Server Web Méthode Vous devez toujours passer par Oauth, mais vous devez faire Ce n'est qu'une fois. Et ensuite, après cela, vous obtenez un jeton de rafraîchissement que vous pouvez utiliser pour générer plus de jetons d'accès en cas de besoin sans passer à nouveau sur Oauth Flow. Les [comptes de service] ( développeurs.google.com/accou


Ok, peut-être que cela fait l'affaire. Mais je suis toujours intéressé par une réponse complète adressant également les autres points mentionnés.


3 Réponses :


2
votes

Je pense que cela fonctionne, vous devez utiliser OAuth mais avec une légère modification pour l'exécuter à partir du serveur. Google appelle cette méthode d'authentification " Utilisation de OAuth 2.0 pour les applications de serveur Web "

comme décrit Sur cette page, vous pouvez utiliser une bibliothèque client PHP pour obtenir l'authentification effectuée. La bibliothèque client est située ici .

Exemple Exemple sur la manière d'utiliser cette bibliothèque client est sur le même projet Aidez les pages . Notez que vous devrez faire quelques modifications au code car les commentaires disent à stocker le jeton dans dB et à l'actualiser régulièrement. xxx


6 commentaires

Je n'ai pas d'insertion_your_oauth2_redirect_uri 'comme je l'ai mentionné dans la question.


Pour accepter cette réponse, vous devez expliquer comment traiter ce problème (pas de redirection URI) ni comment et pourquoi je me trompe avec ma compréhension de la signification de cette URI. De plus, je préférerais un code d'échantillon collé non copié de Google et plutôt un exemple de travail de la façon de chercher quelque chose de significatif comme le nombre de visites pour une URL comme FOO /.


Dans votre configuration, n'est-ce pas l'adresse de votre ordinateur de reqirect. Lorsque Google redirige l'utilisateur après l'authentification, je ne pense pas qu'il valide l'URL. Et puisqu'il n'y a pas de validation, vous pouvez spécifier 127.0.0.1/page_that_reads_the_auth_Token .


C'est un bon point. On dirait que j'ai mal compris la signification de cette URL.


np. heureux de vous aider. @Birla fait quelque chose de très similaire dans sa réponse. Je ne veux pas reproduire son code mais n'hésitez pas à marquer sa réponse comme réponse si vous trouvez sa réponse plus facile à comprendre (il dit la même chose que mon commentaire ci-dessus.)


Est-ce que quelqu'un sait quel est l'accord avec API_KEY? Et pourquoi ça ne marche pas?



2
votes

J'ai une configuration similaire. La chose que vous ne réalisez pas est que vous pouvez spécifier un http: // localhost code> ou http://127.0.0.1 code> ou quelque chose d'autre comme une URL d'origine et de rappel . Vous devez configurer une interface Web sur votre serveur local qui initie une configuration OAuth pour l'utilisateur avec l'accès GA. Notez que c'est une fois. Le gestionnaire de rappel doit ressembler à ceci:

Remarque: les bibliothèques utilisées ici sont identiques à la réponse précédente, le code détaillé est dans l'emballage. P>

$client = new Google_Client();
$client->setApplicationName(self::APP_NAME);

$client->setClientId(self::CLIENT_ID);
$client->setClientSecret(self::CLIENT_SECRET);
$client->setRedirectUri(self::REDIRECT_URI);
$client->setDeveloperKey(self::DEVELOPER_KEY);

//to specify that the token is stored offline
$client->setAccessType('offline');

//all results will be objects
$client->setUseObjects(true);

//tell that this app will RO from Analytics
$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');

return $client;


0 commentaires

5
votes

Comme déjà suggéré, utilisez cette bibliothèque: https://code.google .Com / p / Google-API-PHP-Client / Mais, au lieu d'utiliser OAuth, créez un compte de service à partir de la console API (juste sélectionnez Application Server). Cela vous fournira un identifiant client, un e-mail qui identifie le compte de service et du fichier * .p12 détenant la clé privée.

Vous devez ensuite ajouter le compte de service (l'email) à votre analyse en tant qu'utilisateur administrateur afin d'obtenir les données dont vous avez besoin.

Pour utiliser le service: xxx

pour obtenir des données: xxx

Pour les détails, vérifiez API Docs. Aussi, soyez prudent, il y a un capuchon de requête (sauf si vous payez)


2 commentaires

La chose qui m'empêche d'utiliser cette méthode est perte de flexibilité . Si je dois migrer vers un autre compte GA, j'ai besoin d'obtenir de nouvelles informations d'identification de service ou si je dois récupérer des données de deux comptes différents, je devrai utiliser de la scandale. À la fin, c'est juste le choix que j'ai utilisé les deux!


J'ai accordé la prime à cette réponse parce que (du moins superficiellement), il semble aborder mon problème plus directement que les autres réponses. Je n'ai pas encore trouvé le temps à traiter plus avec le projet. Dès que je connais avec certitude comment l'obtenir dans mon cas, je vais marquer la réponse ou écrire un moi-même.