Bonjour à tous,

Je bosse sur un site d'annonce immobilière et le client voudrait afficher sur chaque annonce le nombre de fois où cette page à été vue.
C'est typiquement le genre de données présentes dans google-analytics.

Le but serait de faire un script exécuté par un cron qui va extraire ces infos pour les enregistrer en base.

J'ai donc récupéré la librairie php 'google-api-php-client' (https://github.com/google/google-api-php-client)
Mais tous les exemples que je trouve utilise une identification OAuth 2.0 nécessitent un utilisateur actif capable de cliquer sur des lien et saisir son mot de passe. Hors je voudrai faire ça en ligne de commande (CLI)

Dans la console de google (https://console.developers.google.com/project)

Dans APIs j'ai activé Analytics API

Dans Crédentials :

j'ai crée un "CLIENT ID"

"OAuth" [CREATE NEW CLIENT ID]

J'ai choisie un Application type : "Service account"
Calls Google APIs on behalf of your application instead of an end-user.
A la création j'obtient mon "private key's password" et un fichier xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12

Dans la console j'ai maintenant un Service Account avec
  • Client ID
  • Email address. Qui est apriori utilisé comme nom de compte
  • Public key fingerprints. (C'est quoi ?)



Pour le moment j'arrive à faire ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
// CMS init... 
 
set_include_path("path/to/google-api-php-client/src/" . PATH_SEPARATOR . get_include_path());
 
$SERVICE_ACCOUNT_KEY_FILE = 'path/to/google-api-key/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12';
$SERVICE_ACCOUNT_NAME = 'xxxxxxxxxx@developer.gserviceaccount.com';//Email address dans la console google
$GOOGLE_ANALYTICS_VIEW_ID = 'xxxxxxx';
 
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents ( $SERVICE_ACCOUNT_KEY_FILE );
 
$cred = new Google_Auth_AssertionCredentials ( $SERVICE_ACCOUNT_NAME, array (
		Google_Service_Analytics::ANALYTICS_READONLY
), $key );
$client->setAssertionCredentials ( $cred );
if ($client->getAuth ()->isAccessTokenExpired ()) {
	$client->getAuth ()->refreshTokenWithAssertion ( $cred );
}
 
$analytics = new Google_Service_Analytics($client);
 
$analytics->data_ga->get(
	'ga:' . $GOOGLE_ANALYTICS_VIEW_ID,
	'2012-03-03',
	'2014-03-03',
	'ga:visits');
// Error calling GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3Axxxxx&start-date=2012-03-03&end-date=2014-03-03&metrics=ga%3Avisits:
// (403) User does not have any Google Analytics account.
Déjà je ne me mange pas l'erreur "(401) Login Required"
Cela veut-il dire que mon utilisateur est bien identifié ?

Je ne pense pas qu'il me manque grand chose... Mais j'arrive pas à mettre le doit dessus ...

Merci par avance pour votre aide