Google Analytics API
Voici une classe vous permettant de profiter des services d’analyse de site web proposés par Google. Vous allez pouvoir, très facilement, récupérer les données qui sont affichées sur votre interface Google Analytics.

Cette classe s’appuie sur le web service proposé par google et utilise essentiellement deux types de paramètres : les metrics et les dimensions. Pour comprendre à quoi cela correspond, je vous conseil d’aller voir directement sur la documentation officielle. L’ensemble des paramètres sont visible ici.
Il est également indispensable de connaitre son ID de site web, que l’on retrouve dans l’url de Google Analytics quand on consulte ses stats. Exemple pour moi : https://www.google.com/analytics/reporting/?reset=1&id=14186909&pdr=xxx. Mon ID est « 14186909″ et il doit etre renseigner dans le constructeur de la classe.
![]()
Les 2 principales méthodes de cette classe sont : getDimensionByMetric & getMetric.
getDimensionByMetric renvoie un tableau contenant 2 sous tableaux « labels » et « datas ». « labels » contient les informations formatées tel qu’on les voient dans l’interface alors que « datas » ne contient que les données brutes. Exemple :
require_once('GoogleAnalyticsAPI.class.php');
$ga = new GoogleAnalyticsAPI('mon_adresse@gmail.com', 'mon_password', 'mon_id', date('Y-m-d', time()));
$navigateurs = $ga->getDimensionByMetric('pageviews', 'browser');
renvoie
Array
(
[labels] => Array
(
[0] => Firefox (17)
[1] => Safari (5)
[2] => Chrome (3)
[3] => Internet Explorer (2)
)
[datas] => Array
(
[0] => 17
[1] => 5
[2] => 3
[3] => 2
)
)
getMetric renvoie directement la valeur du metric demandé. Exemple :
require_once('GoogleAnalyticsAPI.class.php');
$ga = new GoogleAnalyticsAPI('mon_adresse@gmail.com', 'mon_password', 'mon_id', date('Y-m-d', time()));
$page_views = $ga->getMetric('pageviews');
renvoie directement
127
On peut alors mettre au point des récupérations de données plus complexe :
require_once('GoogleAnalyticsAPI.class.php');
$ga = new GoogleAnalyticsAPI('mon_adresse@gmail.com', 'mon_password', 'mon_id', date('Y-m-d', time()));
// Stats de la journée en cours
$navigateurs = $ga->getDimensionByMetric('pageviews', 'browser');
$countries = $ga->getDimensionByMetric('pageviews', 'country');
$keywords = $ga->getDimensionByMetric('pageviews', 'keyword');
$source = $ga->getDimensionByMetric('pageviews', 'source');
$pagePath = $ga->getDimensionByMetric('pageviews', 'pagePath');
$visits = $ga->getMetric('visits');
$unique_visits = $ga->getMetric('visitors');
$page_views = $ga->getMetric('pageviews');
$page_views_cv = $ga->getDimensionByMetric('pageviews','pagePath','pagePath%3D%3D/cv/');
echo '<pre>';
print_r($navigateurs);
print_r($page_views);
echo '</pre>';
echo '<h2>Pour le '.date('Y-m-d', time()).'</h2>';
echo '<strong>Pages vues par navigateurs :</strong>'.'<br />';
foreach ($navigateurs['labels'] as $label) {
echo $label.'<br />';
}
echo '<br />';
echo '<strong>Pages vues par mots clefs :</strong>'.'<br />';
foreach ($keywords['labels'] as $label) {
echo $label.'<br />';
}
echo '<br />';
echo '<strong>Pages vues par source :</strong>'.'<br />';
foreach ($source['labels'] as $label) {
echo $label.'<br />';
}
echo '<br />';
echo '<strong>Pages vues par pagePath :</strong>'.'<br />';
foreach ($pagePath['labels'] as $label) {
echo $label.'<br />';
}
echo '<br />';
echo '<strong>Pages vues par pays :</strong>'.'<br />';
foreach ($countries['labels'] as $label) {
echo $label.'<br />';
}
echo '<br />';
echo '<strong>Nombre de visite(s) :</strong>'.$visits.'<br />';
echo '<strong>Nombre de visite(s) unique(s) :</strong>'.$unique_visits.'<br />';
echo '<strong>Page(s) vue(s) :</strong>'.$page_views.'<br />';
echo '<strong>Page(s) vue(s) pour CV :</strong>'.$page_views_cv.'<br />';
Enfin, dernier petit exemple avec une mise en forme basée sur Google Charts (qui fera l’objet d’une classe très bientôt) :
require_once('GoogleAnalyticsAPI.class.php');
$ga = new GoogleAnalyticsAPI('mon_adresse@gmail.com', 'mon_password', 'mon_id', date('Y-m-d', time()));
$navigateurs = $ga->getDimensionByMetric('pageviews', 'browser');
echo '<strong>Graphique des pages vues par navigateurs :</strong>'.'<br />';
foreach ($navigateurs['labels'] as $label) {
echo $label.'<br />';
}
echo '<img src="http://chart.apis.google.com/chart?cht=p3&chd=t:'.implode(',',$navigateurs['datas']).'&chs=550x100&chl='.implode('|',$navigateurs['labels']).'" />';
Ce qui donne comme résultat :

Cette classe est documentée et toutes les variables sont décrites dans le code, n’ayez donc pas peur de la télécharger et de la tester
.
Libre à vous de mettre en forme et d’exploiter les données proposées par les méthodes.
Note : Merci à William DURAND pour les posts qu’il à put faire sur Google Analytics et surtout pour la manipulation des dimensions et des metrics.
Attention : Google envoie toutes les données dans un flux xml en UTF8, si votre site est en UTF8, aucun problème, sinon, pensez à utf8_decode().
GoogleAnalyticsAPI.class.php (6,5 KiB, 2 869 hits)
Changelog
[30/04/2011]
- Ajout d’un paramètre $filters permettant de filtrer n’importe quelle requête sur un paramètre précis ($ga->getDimensionByMetric(‘pageviews’,'pagePath’,'pagePath%3D%3D/cv/’);)
[05/08/2009]
- Correction du bug sur $date_end
- Ajout des méthodes setSortByMetrics et setSortByDimensions pour trier par metrics ou dimensions
[04/08/2009]
- Release initiale



2 août 2011 - 10 h 19 min
Bonjour Greg, tu n’as pas un problème avec le Foreach ??
Quand je fais un print d’une requête :
$countries = $ga->getDimensionByMetric(‘pageviews’, ‘country’);
print_r($countries);
J’obtiens :
Array ( [0] => Array ( [label] => France [value] => 11 ) [1] => Array ( [label] => Germany [value] => 2 ) )
Les valeurs sont exactes mais le foreach countries['labels'] me renvoi toujours l’erreur Invalid argument supplied for foreach()
Svp aidez moi …? merci
2 août 2011 - 10 h 24 min
Comme à mon habitude, l’ajout d’une demande d’aide déclenche chez moi une série de tests qui au final s’avèrent positifs !
Je m’attendais à devoir intégrer un appel spécial à un « AuthSubRequest » quelque part, mais finalement une simple mise en session lors du login() puis un test si la session existe dans la constructeur, et cela fonctionne : le chargement de la page est bien plus rapide ! Si cela peut aider… bonne journée
2 août 2011 - 10 h 32 min
@max
salut
perso je demande $ga->getDimensionByMetric(‘visits’, ‘country’); + j’utilise « while(list($k,$v)=each($countries['labels'])) »à la place du foreach()
et cela fonctionne bien. A tester de ton coté
2 août 2011 - 10 h 34 min
Merci Greg, je vais abandonner le foreach pour tester la méthode avec le While
2 août 2011 - 23 h 03 min
Bonjour,
je n’ai pas bien compris l’utilisation. Vous n’avez pas plus d’exemples ?
Je ne comprend pas comment définir une période.
Je cherche à faire quelque chose de simple : récupérer le nombre de visites/jours ou semaines sur les X derniers jours.
Merci de votre aide,
++
3 août 2011 - 11 h 02 min
Salut Oliw,
tu as tout ce qu’il te faut avec les exemples ci-dessus.
Pour la définition des periode, tu met ta date de début et ta date de fin, exemple pour le mois en cours :
$gamonth = new GoogleAnalyticsAPI(‘ton identifiant google’, ‘ton mot de passe’, ‘ton id google’, 2011-08-01, 2011-08-31);
Apres tu peux initialiser les dates avec un formulairte et mettre tout cela avec des variables pour afficher la période voulue
$ga = new GoogleAnalyticsAPI(‘ton identifiant google’, ‘ton mot de passe’, ‘ton id google’, $Date_debut, $Date_Fin);
Voila à toi de jouer maintenant
13 août 2011 - 17 h 09 min
Merci Max pour ton aide,
en fait, je me suis mal exprimé : je cherche a avoir le nombre de visiteurs, par jours, sur une période d’un mois.
Grâce à ton explication, je comprends comment définir une période, mais j’obtiens alors le nombre de visite sur cette période et non jour par jour…
Merci de votre aide
24 août 2011 - 15 h 04 min
Bonjour,
Je souhaiterais récuperer tous les mots clés utilisés poue les visites d’un site, mias les resultats sont limités. Est-ce que quelqu’un sait comment contourner cette limite ?
Merci d’avance.
11 septembre 2011 - 15 h 50 min
Bonjour,
si je demande $navigateurs = $ga_mois->getDimensionByMetric(‘visits’, ‘day’); pour les 30 derniers (donc avec des stats à cheval sur 2 mois), j’obtiens un array mal rangée et pas d’info sur le mois.
Aussi, comment classer mon Array pour retrouver l’ordre chronologique ?
Merci.
19 septembre 2011 - 9 h 50 min
Il te suffit pour cela d’utiliser setSortByDimensions() !
2 octobre 2011 - 19 h 24 min
Bonjour,
Concernant les referer, je souhaite obtenir la liste des sites hors moteurs de recherche.
J’utilise $ga->getDimensionByMetric(‘visits’, ‘source’) qui me renvoie tout. Comment exclure les moteurs de recherche ?
merci de votre aide.
2 octobre 2011 - 21 h 43 min
J’ai fini par trouver :
$ga->getDimensionByMetric(‘visits’,'source’,'medium%3D%3Dreferral’);
c’était déjà indiqué dans un post précédent.
Bonne soirée,
6 décembre 2011 - 17 h 48 min
Bonjour,
J’ai un souci pour utiliser cette classe. en effet, à chaque fois que j’essaye de récupérer des metrics, il me renvois un code 403. Je ne comprends pas pourquoi il me bloque, sachant que le code sont bons.
Si quelqu’un a déjà rencontré ce problème, je serait ravi d’avoir un retour d’expérience.
2 janvier 2012 - 14 h 47 min
Bonjour,
j’utilise cette class depuis qq mois déjà est en suis très satisfait.
Ceci dit je ne parviens toujours pas a afficher sur une même page le nm de visiteur du jour, de la semaine et du mois.
Ceci sans faire de switch.
Je souhaiterais juste afficher trois lignes sur ma page :
Visiteurs du jour : xxxx
Visiteurs de la semaine : xxxxx
Visiteurs du mois : xxxxxx
Merci de votre aide
2 janvier 2012 - 15 h 32 min
Moi je fais quelque chose de ce style (en remplaçant les bonnes variables) :
$begin = date(‘Y-m-d’,mktime(0,0,0,$mois,$jour,$annee));
$end = date(‘Y-m-d’,mktime(0,0,0,$mois,$jour,$annee));
$ga->setDate($begin,$end);
$visits = $ga->getMetric(‘visits’);
Tu peux faire cela autant de fois que tu veux.