Présentation de l'API Google Analytics en PHP


précédentsommairesuivant

II. Réception des données : le principe

II-A. Principe général

L'API Google Analytics est relativement simple : vous demandez une information en GET (en accédant à une URL), vous recevez un flux XML en réponse.

II-B. Authentification

L'échange des données se fait après une authentification préalable par Google. En réponse de l'authentification, vous recevez un jeton d'identification "token", valable pour une seule requête (nous verrons comment le rendre permanent) :

Il existe deux types d'authentification :

Deux types d'authentification
  • Authentification client :
    L'utilisateur est redirigé vers Google Account et doit saisir son mot de passe. le compte utilisé est celui de l'utilisateur.
  • Authentification serveur :
    L'identifiant et le mot de passe sont enregistrés dans l'application, et transmis de façon transparente pour l'utilisateur. Le compte utilisé est celui du propriétaire de l'application.
2 types d'authentification en étapes
Authentification client Authentification serveur
Redirection vers Google Account Identification directe par compte unique et obtention d'un jeton
L'utilisateur accepte (ou non) que l'application ait accès à ses données Utilisation par l'application de ce jeton pour effectuer une requête
Redirection vers l'application et livraison d'un jeton
Utilisation par l'application de ce jeton pour effectuer une requête

Nous allons dans un premier temps n'examiner que le premier cas d'authentification (Authentification client). Pour un exemple d'Authentification serveur, vous pouvez vous rendre dans la section IV de ce tutoriel (Zend Framework).

Voyons maintenant ce qui se passe lors d'une Authentification client. Concrètement, il suffit d'appeler la page https://www.google.com/accounts/AuthSubRequest, en précisant deux paramètres :

Authentification client - Paramètres
  • scope : le service (ici pour Google Analytics : https://www.google.com/analytics/feeds/)
  • next : la page de redirection une fois l'authentification effectuée
 
Sélectionnez

/**
 * appeler la page de connexion
 * l'utilisateur sera redirigé vers le site Google, puis redirigé vers la page indiquée
 * @param		string	url de retour
 */
function google_login($urlRetour) {
	$url = 'https://www.google.com/accounts/AuthSubRequest?'
	. '&next='.$urlRetour
	. '&scope=https://www.google.com/analytics/feeds/'
	. '&secure=0'
	. '&session=1';
 
	header("Location: $url");
	exit;
}

II-C. Réception de données : cURL

Une fois authentifié, Google redirige l'utilisateur vers votre page (url passée dans "next"), et ajoute un argument ?token=xxxxxxx. C'est votre jeton d'identification, valable une fois.

 
Sélectionnez

/**
 * récupérer le token de l'url en GET
 * @return	string	token
 */
function google_get_token() {
	if( !isset($_GET['token']) ) return false;
	if( empty($_GET['token']) ) return false;
	return strip_tags( $_GET['token'] );
}

Vous aurez besoin de ce jeton à chaque requête envoyée à Google. Ce jeton s'envoie en en-tête de votre requête :

 
Sélectionnez

Authorization: AuthSub token="xxxxx"

C'est ici que ça se corse un peu. Pour envoyer cet en-tête, vous aurez besoin de cURL :

 
Sélectionnez

/**
 * effectuer une requete cUrl chez google
 * @param		string	requete
 * @return	xml	/ génère une erreur
 */
function google_call($url, $token) {
 
	//
	// entête à envoyer
	$headers	= array( 'Authorization: AuthSub token="$token"' );
 
	//
	// 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		=> "spider",	// 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);
		echo '</pre></p>';
		exit;
	}
 
	//
	// renvoyer le contenu
	return $content;
}

Si tout est bon, Google renvoie le code "200".

II-D. Réception de données : Stream

Vous pouvez tout autant passer par des fonctions de flux (stream), et éviter ainsi l'utilisation de cURL :

 
Sélectionnez

/**
 * effectuer une requete chez google en utilisant les fonctions de flux
 * @param		string	requete
 * @return	xml
 */
function google_call($url, $token) {
 
	//
	// entête à envoyer
	$headers	= array( 'Authorization: AuthSub token="$token"' );
	$options 	= array(
		'http' => array(
		'method' => 'POST',
		'header' => $this->headers)
	);
 
	//
	// flux
	$context = stream_context_create($options);
	$content = file_get_contents($url, false, $context);
 
	return $content;
}

II-E. Exemple : lister tous les profils du compte

Maintenant, utilisons cette fonction pour effectuer la requête qui va nous fournir la liste de nos comptes :

 
Sélectionnez

//
// effectuer une requete : on va lister tous les comptes du profil
$accountxml = google_call("https://www.google.com/analytics/feeds/accounts/default");
echo $accountxml;
 

Vous voilà avec un flux XML contenant la liste de vos comptes.


précédentsommairesuivant

  

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.