Présentation de l'API Google Analytics en PHP


précédentsommairesuivant

V. Pour ceux qui ne peuvent pas utiliser le Zend Framework : alternative POO

V-A. Présentation

Cette partie est entièrement facultative pour la compréhension de l'API. Si vous avez la possibilité d'utiliser Zend Framework, vous pouvez directement passer à la conclusion :-)

Pour ceux qui sont intéressés, je vous propose de une petite classe, qui nous permettra de gérer l'API Google Analytics sans le Zend Framework, ce de manière plus efficace qu'en utilisant de simples fonctions. Nous appelerons cette classe Google_Analytics, et elle sera située dans le fichier class/Google_Analytics.php

Pour plus de simplicité, j'ai utilisé des raccourcis, notamment l'utilisation d'un tableau pour stocker l'ensemble des informations de la classe, ce qui n'est pas forcément à faire en production.

Cette classe reprend l'ensemble des fonctions que nous avons vu plus haut, je vous la présente donc globalement sans m'arrêter dans le détail.

L'authentification est gérée par la méthode authentificate(), qui regarde si un jeton permanent existe, et effectue les opérations d'identification si besoin (appel des méthodes login() et setPermanentToken() ).

La fonction google_call est remplacée par la méthode call().

Enfin, pour éviter d'avoir à redemander à chaque nouvelle page un nouveau token, ce token est conservé en session.

 
Sélectionnez

abstract class Google_Analytics {
 
	private static $_var = array();	// espace de stockage pour les variables. 
 
 
	/**
	  * authentifier l'utilisateur
	  * la méthode va chercher si il y a un token défini
	  * sinon, elle va tenter d'en déterminer un :
	  *	soit il y a un token dans la session
	  *	soit il n'y a aucun token	=> redirection vers la page de login de Google
	  *	soit il y a déjà un token à usage unique	=> transormation du token en token à usage multiple
	  */
	public static function authentificate() {
 
		if( !self::get('token')) {
 
			//
			// rechercher dans session
			if( isset($_SESSION['token']) ) {
				self::set('token', $_SESSION['token'] );
				return;
			}
 
			//
			// premier affichage :
			if( !self::get('single_use_token') ) {
 
				//
				// pas de token en GET, le demander
				if( !isset($_GET['token']) ) {
					self::login( self::get('base_url') );
				} else {
				//
				// token en GET, le rendre permanent
					self::set( 'single_use_token', strip_tags($_GET['token']) );
					self::setPermanentToken();
				}
			}
		}
	}
 
 
	/**
	 * appeler la page de connexion
	 * l'utilisateur sera redirigé vers le site Google, puis redirigé vers la page indiquée
	 */
	public static function login() {
		$url		='https://www.google.com/accounts/AuthSubRequest?'
		. '&next='.$urlRetour
		. '&scope=https://www.google.com/analytics/feeds/'
		. '&secure=0'
		. '&session=1';
 
		header("Location: $url");
		exit;
	}
 
 
	/**
	 * transformer un jeton à usage unique en un jeton à usage multiple
	 */
	public static function setPermanentToken() {
 
		$url		= 'http://www.google.com/accounts/AuthSubSessionToken';
		$token 		= self::call($url);
 
		//
		// extraire le token
		$token		= str_ireplace('Token=', '', $token);
		self::set('token', $token);
 
		//
		// stocker en session
		if(isset($_SESSION)) {
			$_SESSION['token']	= $token;
		}
 
	}
 
 
	/**
	 * effectuer une requete cUrl chez google
	 * @param	string	requete
	 * @return	xml	/ génère une erreur
	 */
	public static function call($url) {
 
		//
		// choix du token à utiliser
		$token	= self::get('token');
		if(!$token)	$token	= self::get('single_use_token');
 
		//
		// entête à envoyer
		$headers	= array(
			sprintf("Authorization: AuthSub token=\"%s\"/n", $token ),
			//sprintf("X-Google-Key: key=\"%s\"/n", self::get('key') )	// au cas où, utilisez ici votre developer key Google
		);
 
		//
		// Requete cUrl
		$ch = curl_init($url);
		$options = array(
			CURLOPT_RETURNTRANSFER	=> true,		// renvoie une page web
			CURLOPT_HEADER		=> false,		// ne renvoie pas d'en-tête
			CURLOPT_HTTPHEADER		=> $headers,	// en-têtes à envoyer
			CURLOPT_FOLLOWLOCATION	=> true,		// suivre les redirections
			CURLOPT_ENCODING		=> "",		// tout encodage possible
			CURLOPT_USERAGENT		=> "demo-dvp",	// nom de l'agent
			CURLOPT_AUTOREFERER	=> true,		// set referer on redirect
			CURLOPT_CONNECTTIMEOUT	=> 120,		// timeout on connect
			CURLOPT_TIMEOUT		=> 120,		// timeout on response
			CURLOPT_MAXREDIRS		=> 10,		// stop after 10 redirects
			CURLOPT_SSL_VERIFYHOST	=> 0,		// ne pas vérifier le SSL
			CURLOPT_SSL_VERIFYPEER	=> false,		// ne pas vérifier le SSL
			CURLOPT_VERBOSE		=> 1
		); 
		curl_setopt_array($ch,$options);
 
		//
		// Reponse cUrl
		$content = curl_exec($ch);
		$err     = curl_errno($ch);
		$errmsg  = curl_error($ch) ;
		$resp	 = curl_getinfo($ch); 
		curl_close($ch);
 
		//
		// Erreur : le code 200 n'est pas envoyé
		if($resp['http_code'] != '200') {
			echo '<strong>Impossible d\'effectuer la requete : '.$content.'</strong><p><pre>';
			print_r($resp);
			print_r($headers);
			echo '</pre></p>';
			exit;
		}
 
		//
		// renvoyer le contenu
		return $content;
	}
 
	/**
	 * getters and setters
	 */
	public function set($var, $value) { self::$_var[$var]	= $value; }
	public function get($var) { if(!isset(self::$_var[$var])) return false; return self::$_var[$var]; }
}

Ce code est simple, je vous laisse le consulter en vous référant aux remarques précédentes.

Cette classe est loin d'être complète, mais j'espère qu'elle sera vous aider à mieux comprendre comment utiliser l'API Google Analytics.

V-B. Exemple : lister tous les profils du compte

Nous pouvons maintenant terminer notre application, qui sera cette fois totalement orientée Objet :

 
Sélectionnez

session_start();
 
require_once 'class/Google_Analytics.php';
require_once 'inc/google_functions.php';
 
 
//
// configuration
Google_Analytics::set('profil_id'	, '123456' );
Google_Analytics::set('base_url'	, 'http://monsite.fr/mapage.php' );
 
 
//
// Etablir la connexion à Google Analytics
Google_Analytics::authentificate();
 
 
//
// lister les comptes
$accountxml 	= Google_Analytics::call("https://www.google.com/analytics/feeds/accounts/default");
$tProfiles	= parse_account_list($accountxml);
echo '<pre>';
print_r($tProfiles);

V-C. Afficher le nombre de pages vues

Il est possible d'accéder à une large gamme de données (dont voici la liste complète).

Il suffit d'effectuer une requête à l'adresse https://www.google.com/analytics/feeds/data, en précisant :

  • ids : l'id du profil
  • metrics : les données demandées

Il y a d'autres paramètres, mais ceux-là suffisent à notre exemple.

 
Sélectionnez

//
// profil id du premier compte trouvé:
$profilId	= $tProfiles[0]["tableId"];
 
//
// requete : nombre de pages vues (ga:pageviews) du 01 avril 2009 à aujourd'hui
$requrl = sprintf("https://www.google.com/analytics/feeds/data?ids=%s&metrics=ga:pageviews&start-date=
2009-04-01&end-date=".date('Y-m-d'), );
$pagecountxml = Google_Analytics::call($requrl);
 
//
// analyse du résultat
$doc = new DOMDocument();
$doc->loadXML($pagecountxml);
$metrics = $doc->getElementsByTagName("metric");
$views = $metrics->item(0)->getAttribute('value');
 
echo 'il y a '.$views.' pages vues pour la période';

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Jean-François Lépine. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.