Tracer le temps de connexion des utilisateurs via Google Analytics

Il m'a été demandé récemment, dans le cadre du développement d'une interface d'administration, d'envoyer quotidiennement un email de reporting.

Cet email devait contenir, entre autres, pour chacun des utilisateurs connectés, le temps effectivement passé sur le site.

Il m'a semblé alors intéressant d'utiliser Google Analytics car il est capable de calculer cette information de manière relativement précise.

Trois étapes sont nécessaires :
- mettre en place une variable personnalisée (Google Analytics) pour extraire les données spécifique à un utilisateur donné
- Se connecter à Google Analytics en Php
- Récupérer le temps de connexion lié à la variable personnalisée précédemment mise en place.

Rappel sur les variable personnalisée de Google Analytics

Les variables personnalisées Google Analytics permettent de créer des segments personnalisés directement depuis les tags mis en place dans le code source du site.

Ainsi il devient possible, dans le cas présent, de dire à Google Analytics : "Les données qui vont être envoyées correspondent à l'utilisateur XXX"

Ainsi, nous aurons la possibilité de demander plus tard à Google Analytics : "Combien de temps l'utilisateur XXX a-t-'il passé sur le site tel jour ?"

La porté des variables personnalisées

Il y a trois portés (scope) de variable personnalisée :
- page : la variable personnalisée n'est valable que pour la page sur laquelle elle est définie
- session : la variable personnalisée est valable pour toute la durée d'activité de l'utilisateur sur le site
- visiteur : la variable personnalisée est valable aussi longtemps que possible

Le plus pertinent est d'utiliser une variable personnalisée de session car seuls les utilisateurs connectés nous intéressent.

Les slots

Google Analytics propose 5 'slots' permettant de stocker des variables personnalisées.
Les slots sont des 'containers' de variables personnalisées. Cela permet de gérer plus facilement un grand nombre de variables personnalisées.
Attention deux variables portant le même nom mais mises dans des slots différents sont considérées comme des variables totalement différentes.

Nous n'allons gérer qu'une seule variable, ainsi donc, nous n'utiliserons que le slot 1.

Pour ajouter une variable personnalisée il suffit d'ajouter le code suivant au code de déclaration de Google Analytics

  _gaq.push(['_setCustomVar',
      1,                 // Slot [1 à 5] (paramètre obligatoire)
      'user',           // nom de la variable (paramètre obligatoire)
      'tribulations',   // valeur (paramètre obligatoire) parameter.
      2                 // portée : 1 => visiteur , 2 => session  3 => page (paramètre optionnel)
   ]);

Il est recommandé de placer ce morceau de code avant l'appel à
_gaq.push(['_trackPageview']);

1. Mettre en place une variable personnalisée

Il faut donc récupérer l'utilisateur actuellement connecté et injecter la variable personnalisée.

Dans mon layout Symfony et en utilisant sfGuardUser, j'ai rajouté :

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
    <?php if($sf_user->isAuthenticated()): ?>
    _gaq.push(['_setCustomVar',
            1,
            'user',
            '<?php echo $sf_user->getGuardUser()->getUsername(); ?>',
            2
        ]);
    <?php endif: ?>
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
 
</script>

On peut ensuite vérifier que les informations remontent bien dans Google Analytics :
Rapports standards -> Audience -> Données démographiques -> Variables personnalisées

On a accède alors au slot 1, toutes les variables du slot 1 sont listées :

On choisit alors la variable qui nous intéresse (user) pour en avoir le détail :

2. Se connecter à Google Analytics en Php

J'ai choisi d'utiliser une librarie existant : GAPI (Google Analytics Php Interface)

Pour l'utiliser, rien de plus simple :

<?php
require 'gapi.class.php';
$ga = new gapi('loginGoogleAnalytics','MotDePasseAnalytics');
 

3. Récupérer le temps de connexion

Ce qui nous intéresse maintenant, c'est de connaitre le temps de connexion au site en fonction de l’utilisateur.

Dans le vocabulaire Google Analytics :
- ce qui doit être mesuré = metrics
- ce qui sert de base de référence = dimension

Ainsi, le temps de connexion est notre metric et l'utilisateur notre dimension.

Ces notions sont fondamentale pour récupérer correctement les informations qui nous intéressent. Il est d'ailleurs possible de jouer avec l'API Google Analytics pous savoir quelles metric et dimension choisir (Data Feed Query Explorer).

Nous allons avoir besoin d' l'id du profil Google Analytics que nous voulons étudier.
Pour cela, une fois connecté sur le profil en question sur Google Analytics, il faut se rendre dans Admin -> Profils -> Paramètres de profil. Il s'agit du champ "ID du profil"

Il ne reste plus qu'à récupérer les informations qui nous intéressent :

<?php
require 'gapi.class.php';
$ga = new gapi('loginGoogleAnalytics','MotDePasseAnalytics');
// paramètres
$report_id		= 'XXXXXX'; // il s'agit de l'ID du profil
$dimensions		= array('customVarValue1'); // on veut les variables du slot 1
$metrics		= array('visits','timeOnSite'); //  on veut récupérer le nombre de visites et la durée de connexion
$sort_metric		= 'customVarValue1'; // on trie par nom d'utilisateur croissant
$filter			= null;
$start_date		= '2012-03-15'; // pour la journée du 15 mars 2012
$end_date		= '2012-03-15';
$start_index	= 1;
$max_results	= 30;
 
$ga->requestReportData($report_id,$dimensions,$metrics,$sort_metric,$filter,$start_date,$end_date,$start_index,$max_results);
 
foreach($ga->getResults() as $result)
{
	echo $result .": \r\n";
	echo "\tVisits : ". $result->getVisits() . "\r\n";
	echo "\tTimeOnSite : ". $result->getTimeOnSite() . " secondes\r\n";
}
 

Ce qui donne le résultat suivant :
hmoreau:
        Visits : 2
        TimeOnSite : 252 secondes
jytollu:
        Visits : 1
        TimeOnSite : 0 secondes
 

postheadericon Commentaires