III. Pour aller plus loin▲
III-A. Un jeton à usage multiple▲
Le jeton que vous avez obtenu n'est valable qu'une fois, c'est-à-dire qu'à chaque requête, Google va vous demander de vous reconnecter (si vous essayez sans, vous recevrez à la place du flux une erreur 301 "Invalid Token" dans le corps de la réponse).
Il va falloir rendre ce jeton à usage unique permanent (nous parlerons de jeton à usage multiple). Pour cela, effectuer une requête à l'adresse "http://www.google.com/accounts/AuthSubSessionToken", en passant notre jeton actuel en en-tête. Nous recevrons une réponse du type : Token=xxxxxxx
où xxxxxxx est le jeton à usage multiple que vous devrez désormais utiliser :
/**
* transformer un jeton à usage unique en un jeton à usage multiple
* @param string jeton à usage unique
* @return string jet à usage multiple
*/
function google_get_permanent_token($token) {
$url = 'http://www.google.com/accounts/AuthSubSessionToken';
$new_token = google_call($url, $token);
//
// extraire le token du résultat
$new_token = str_ireplace('Token=', '', $new_token);
return $new_token;
}III-B. Un flux XML c'est bien, des données organisées c'est mieux▲
Vous me direz : j'ai eu un flux XML, super, mais qu'est-ce que j'en fait. Je n'arrive même pas à le parser correctement avec SimpleXML ?
Pas de souci, je vous propose une petite fonction bien pratique, que j'ai trouvée sur Alex Curelea's Dev Log
/**
* parser les comptes utilisateur
* trouvé sur Alex Curelea's Dev Log
* http://www.alexc.me/using-the-google-analytics-api-getting-total-number-
of-page-views/74/
* @param string xml
* @return array
*/
function google_parse_account_list($xml)
{
$doc = new DOMDocument();
$doc->loadXML($xml);
$entries = $doc->getElementsByTagName('entry');
$i = 0;
$profiles = array();
foreach($entries as $entry)
{
$profiles[$i] = array();
$title = $entry->getElementsByTagName('title');
$profiles[$i]["title"] = $title->item(0)->nodeValue;
$entryid = $entry->getElementsByTagName('id');
$profiles[$i]["entryid"] = $entryid->item(0)->nodeValue;
$properties = $entry->getElementsByTagName('property');
foreach($properties as $property)
{
if (strcmp($property->getAttribute('name'), 'ga:accountId') == 0)
$profiles[$i]["accountId"] = $property->getAttribute('value');
if (strcmp($property->getAttribute('name'), 'ga:accountName') == 0)
$profiles[$i]["accountName"] = $property->getAttribute('value');
if (strcmp($property->getAttribute('name'), 'ga:profileId') == 0)
$profiles[$i]["profileId"] = $property->getAttribute('value');
if (strcmp($property->getAttribute('name'), 'ga:webPropertyId') == 0)
$profiles[$i]["webPropertyId"] = $property->getAttribute('value');
}
$tableId = $entry->getElementsByTagName('tableId');
$profiles[$i]["tableId"] = $tableId->item(0)->nodeValue;
$i++;
}
return $profiles;
}III-C. Exemple : lister tous les profils du compte▲
Nous avons donc désormais une page complète, qui va nous permettre de lister les comptes liés à notre profil.
//
// appel du fichier qui contient toutes les fonctions que nous avons créées.
// Vous pouvez télécharger ce fichier dans la partie "Ressources & Fichiers" de ce tutoriel
require_once 'inc/google_functions.php';
//
// configuration
$profil_id = '123456789';
$urlRetour = 'www.monsite.fr/mapage.php'; // url de la page vers laquelle sera redirigé l'utilisateur une fois connecté
//
// Récupérer le token
$single_use_token = google_get_token();
//
// Etablir la connexion à Google Analytics si pas encore de token
if(!$single_use_token) {
google_login( $urlRetour );
}
//
// obtenir un token à usage multiple
$token = google_get_permanent_token( $single_use_token );
//
// effectuer une requete : on va lister tous les comptes du profil
$accountxml = google_call("https://www.google.com/analytics/feeds/accounts/default");
//
// parser cette requete et afficher les résultats
$tProfiles = google_parse_account_list($accountxml);
echo '<pre>';
print_r( $tProfiles );

