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.
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->getMetric('pageviews','/une-page-de-mon-arbo/');
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, 1 368 hits)
Changelog
[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







28 juin 2010 - 17 h 28 min
Encore une classe qui va m’être très utile !
2 juillet 2010 - 15 h 39 min
Ca tombe à point pour le nouvel outil que je designe.
De même, existe t’il un moyen d’accéder au compte en lui-même afin d’obtenir sa date de création, la date de lancement. L’idée étant de pouvoir restituer des scénari SEIO !!!
Merci pour cette belle API…
2 juillet 2010 - 17 h 08 min
Oups ! Classe je veux dire
3 juillet 2010 - 15 h 35 min
Hello,
Merci pour ton scriot, c’est nickel.
J’ai un soucis lors du test en ligne, j’ai ce message d’erreur qui apparait en début de page :
« Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /GoogleAnalyticsAPI.class.php on line 163″
Aurais-tu une idée ?
Encore merci
Richard
5 juillet 2010 - 8 h 20 min
Le message d’erreur est pourtant clair
Soit tu as :
- le safe_mode d’activé
- open_basedir de renseigné
Tu es sur PHP 5.3? Le problème résulte de l’utilisation de CURL + ta configuration.
Sinon tu as pas mal de piste : http://www.google.fr/search?aq=f&sourceid=chrome&ie=UTF-8&q=CURLOPT_FOLLOWLOCATION+cannot+be+activated+when+in+safe_mode+or+an+open_basedir+is+set
8 juillet 2010 - 17 h 26 min
Bonjour,
Pour aller recherche les visites provenant uniquement d’une source. Les moteurs de recherche par exemple, doit-t-on utiliser un filtre? je galère de puis tout à l’heure…
8 juillet 2010 - 20 h 25 min
Il faut toujours renseigner un intervalel de date et un metric, c’est tout.
4 août 2010 - 8 h 15 min
Depuis 2 ou 3 jours, je rencontre quelques problèmes de stabilité. La méthode getMetric prend énormément de temps et ne me renvoie aucune valeur pour certains appels (boucle d’une trentaine de query). Je pense que le problème est plutôt du côté de l’accès à Google.
Est-ce que qqun d’autre aurait constaté ce même probleme ?
9 août 2010 - 19 h 10 min
Salut,
Comment on peut selectionner les données de la période totale ? Avoir le nombre de visites depuis l’ouverture du site par exemple.
Comment peut t’on avoir les infos du mois en cours ?
J’ai chercher un peu dans la doc mais j’ai encore un peu de mal à m’y faire.
Et super tuto, merci beaucoup
9 août 2010 - 22 h 28 min
J’ai réussi à avoir la période totale, je cherche toujours à avoir les données du mois en cours.
Sinon je remarque tout comme Olivier un ralentissement assez important lors des échanges serveur avec les services Google.