Après quelques discussions avec d’autres SEO concernant l’utilisation d’applications autres que Google Analytics big brother is watching you pour la mesure d’audience de sites Web, j’ai décidé de me tourner récemment vers une solution Open-Source du nom de Piwik dont @rudy_som avait d’ailleurs parlé au Barcamp BlackHat 2012.
Le problème? Repartir de zéro sans avoir les données précédentes de Google Analytics intégrées à Piwik…
Heureusement, l’API de Google Analytics est là ainsi qu’un script en Python que nous allons adapter afin de pouvoir tout récupérer.
Avant de commencer
Sur http://clearcode.cc/offer/open-source-projects/google2piwik/, vous trouverez un script d’importation qui fera le travail comme un grand. Son seul inconvénient est qu’il utilise une ancienne version de l’API ce qui provoque rapidement des « rate limit exceeded » en raison des quots de l’API d’Analytics.
La nouvelle API autorise 50 000 requêtes par jour et va nous demander quelques modifications dans les différents scripts utilisés.
Ce tutorial a été réalisé sous Debian Squeeze, il s’adaptera facilement aux différentes distributions.
1 – Installation des applications requises
Voici les différents ingrédients nécessaires pour la bonne importation de nos données de Google Analytics vers Piwik:
– Une instance de Piwik
– Un compte Google Analytics
– Python et son module python-mysqldb pour se connecter à la base de données
– La librairie Google Python API (gdata-python-client)
– Le script d’importation Google2piwik
– Un projet dans l’API de Google Analytics
et un accès SSH (of course!)
A – Python et son module Mysqldb:
Si Python n’est pas encore installé sur votre serveur, voici les commandes à lancer pour l’installer
[sourcecode language= »bash »]
apt-get install python
[/sourcecode]
ainsi que le module Mysql
[sourcecode language= »bash »]
apt-get install python-mysqldb
[/sourcecode]
B – Gdata python client:
Il nous faudra également installer la librairie Python gdata-python-client pour accéder à l’API Google, la dernière version étant la 2.0.17. (http://code.google.com/p/gdata-python-client/)
[sourcecode language= »bash »]
cd /tmp
wget http://gdata-python-client.googlecode.com/files/gdata-2.0.17.zip
tar xvzf gdata-2.0.17.tar.gz
cd gdata-2.0.17
./setup.py install
[/sourcecode]
C – Script d’importation Google2Piwik:
Le script est disponible à cette adresse: Google2Piwik, merci à la société http://clearcode.cc qui l’a développé au passage 🙂
[sourcecode language= »bash »]
cd /home/aymeric
wget http://clearcode.cc/google2piwik-1.2.5.tgz
tar xvzf google2piwik-1.2.5.tgz
[/sourcecode]
(pensez à changer le chemin vers votre home)
2 – Adaptation du script d’importation Google2Piwik
Afin d’utiliser le script d’import et le client Gdata avec l’API v2.4, quelques modifications dans le code sont nécessaires afin d’utiliser une API key.
Plusieurs fichiers vont subir des corrections:
– google2piwik.conf (infos de connexion)
– config.py (fichier de configuration du script)
– google2piwik.py (script d’importation)
A – Le fichier de configuration google2piwik.conf
Il faut ajouter les identifiants de votre compte ayant accès à Analytics en modifiant les paramètres user + password
[sourcecode language= »python » firstline= »4″]
[google]
user_login = user
user_pass = password
table_id = ga:XXXXXXXX
[/sourcecode]
et juste en dessous (sous table_id) la ligne suivante:
[sourcecode language= »python » firstline= »8″]
api_key = xxxxxxxxxxxxxxxxxxxxxxxx
[/sourcecode]
On pourra compléter l’API Key à la fin du tutorial, quand votre projet sera configuré dans la console Google Code API.
Il faut ensuite ajouter les informations de connexion à la base de données MySQL de Piwik avec vos paramètres
[sourcecode language= »python » firstline= »10″]
# MySQL Piwik Database configuration
[mysql]
db = piwik
host = localhost
port = 3306
user = piwik
passwd = xxxxxxxxxxxxxxxxxxx
table_prefix = piwik
[/sourcecode]
A la fin du fichier, renseigner la date de début -> date de fin des données à importer ainsi que l’ID du site Piwik et son URL
[sourcecode language= »python » firstline= »19″]
# Set export date range
[export]
start = 2012-06-01
end = 2012-07-29
## Piwik configuration of site.
# For default Piwik installation with one website, site_id should be set to 1
[piwik]
site_id = 3
site_url = http://www.yapasdequoi.com
[/sourcecode]
B – Le fichier config.py
Ensuite, il faut cherche les lignes suivantes (l.13 à 15):
[sourcecode language= »python » firstline= »13″]
MYSQL_CREDENTIALS = {}
GOOGLE_USER = ""
GOOGLE_PASS = ""
[/sourcecode]
et y ajouter cette ligne
[sourcecode language= »python » firstline= »16″]
GOOGLE_KEY = ""
[/sourcecode]
On modifiera également cette ligne (l.20):
[sourcecode language= »python » firstline= »20″]
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS
[/sourcecode]
en la remplaçant par
[sourcecode language= »python » firstline= »20″]
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS, GOOGLE_KEY
[/sourcecode]
enfin, il est nécessaire d’ajouter sous ces lignes (l.30 à 32):
[sourcecode language= »python » firstline= »30″]
GOOGLE_TABLE_ID = conf.get("google", "table_id")
GOOGLE_USER = conf.get("google", "user_login")
GOOGLE_PASS = conf.get("google", "user_pass")
[/sourcecode]
la ligne suivante
[sourcecode language= »python » firstline= »33″]
GOOGLE_KEY = conf.get("google", "api_key")
[/sourcecode]
C – Script d’import google2piwik.py
Par défaut, le script vérifie la présence de « @gmail.com » dans le nom d’utilisateur du fichier de configuration google2piwik.conf. Nous n’avons plus besoin de cette vérification puisque le nom d’utilisateur suffit pour se connecter avec l’API key.
Il faut commenter les lignes suivantes en mettant un # en debut de ligne (l.577 à 579):
[sourcecode language= »python » firstline= »577″]
# if not config.GOOGLE_USER.split("@")[1] == "gmail.com":
# print "Your e-mail address should be ending with @gmail.com"
# exit()
[/sourcecode]
Maintenant, il va falloir passer la clé (Api Key) dans différents appels à l’API. Cela sera possible en spécifiant un paramètre supplémentaire dans la fonction de requête datafeed.
Il faut donc remplacer ces lignes (l.471 à 477)
[sourcecode language= »python » firstline= »471″]
data_query = gdata.analytics.client.DataFeedQuery({
‘ids’: self.table_id,
‘start-date’: day_start,
‘end-date’: day_end,
‘dimensions’: dimensions,
‘metrics’: metrics,
‘max-results’: ‘10000’})
[/sourcecode]
par
[sourcecode language= »python » firstline= »471″]
data_query = gdata.analytics.client.DataFeedQuery({
‘ids’: self.table_id,
‘start-date’: day_start,
‘end-date’: day_end,
‘dimensions’: dimensions,
‘metrics’: metrics,
‘max-results’: ‘10000’,
‘key’: config.GOOGLE_KEY})
[/sourcecode]
et faire cette modification à nouveau pour la fonction FeedFetch à partir de la ligne 482.
Malheureusement, l’interrogation des Table-IDs ne fonctionne plus de la même manière. Ils sont nécessaires pour l’importation, afin que le script sache quelles données exporter. Afin de permettre la lecture des Table-ID, une autre partie du script doit être adaptée (env. à la ligne 518):
Il faut remplacer:
[sourcecode language= »python » firstline= »518″]
def PrintTableIDs(self):
account_query = gdata.analytics.client.AccountFeedQuery()
table_feed = self.client.GetAccountFeed(account_query)
print "Google Analytics Table IDs for your Accountn"
for entry in table_feed.entry:
print "Site: %30s t table_id: %s" % (entry.title.text, entry.table_id.text)
[/sourcecode]
par
[sourcecode language= »python » firstline= »518″]
def PrintTableIDs(self):
account_query = gdata.analytics.client.ProfileQuery(‘~all’, ‘~all’, {‘key’: config.GOOGLE_KEY})
table_feed = self.client.GetManagementFeed(account_query)
print "Google Analytics Table IDs for your Accountn"
for entry in table_feed.entry:
print "Site: %30s t table_id: %s" % (entry.GetProperty(‘ga:profileName’).value, entry.GetProperty(‘dxp:tableId’).value)
[/sourcecode]
3 – Modification de la librairie Gdata en Python
Dans ce module Google, il ne faut pas modifier trop de choses, juste le nom du serveur (hôte) et les chemins pour les requêtes qui doivent être ajustés.
Voici une liste des modifications apportées au fichier gdata-python-client client.py. Le fichier se trouve dans mon installation /usr/local/lib/python2.6/dist-packages/gdata/analytics/client.py
Ligne 116:
[sourcecode language= »python » firstline= »116″]host = ‘www.google.com'[/sourcecode]
par
[sourcecode language= »python » firstline= »116″]host = ‘www.googleapis.com'[/sourcecode]
Ligne 135:
[sourcecode language= »python » firstline= »135″]path = ‘/analytics/feeds/accounts/default'[/sourcecode]
par
[sourcecode language= »python » firstline= »135″]path = ‘/analytics/v2.4/management/accounts'[/sourcecode]
Ligne 158:
[sourcecode language= »python » firstline= »158″]path = ‘/analytics/feeds/data'[/sourcecode]
par
[sourcecode language= »python » firstline= »158″]path = ‘/analytics/v2.4/data'[/sourcecode]
Ligne 179:
[sourcecode language= »python » firstline= »179″]path = ‘/analytics/feeds/datasources/ga/accounts'[/sourcecode]
par
[sourcecode language= »python » firstline= »179″]path = ‘/analytics/v2.4/management/accounts'[/sourcecode]
Ligne 248:
[sourcecode language= »python » firstline= »248″]return (‘/analytics/feeds/datasources/ga/accounts/%s/webproperties'[/sourcecode]
par
[sourcecode language= »python » firstline= »248″]return (‘/analytics/v2.4/management/accounts/%s/webproperties'[/sourcecode]
D’autres lignes utilisent les anciens chemins mais comme elles ne sont pas utilisées par le script d’importation Google2Piwik, il est inutile de les modifier.
4 – Création d’un projet pour l’API
Pour accéder à la nouvelle API, nous avons besoin d’une clé API. Vous allez pouvoir la créer dans la console des API Google:
https://code.google.com/apis/console/ -> Accès à l’API
Créez d’abord un nouveau projet que vous pourrez nommer « google2piwik » par exemple à l’aide du menu déroulant:
Ensuite, une fois votre nouveau projet sélectionner, il faudra activer l’API de Google Analytics en la mettant sur Position Marche (en passant par le lien « Services »):

Vous trouverez maintenant votre clé d’API via le lien « Api Access »

Il ne vous reste plus qu’à rajouter la clé d’API dans dans le fichier de configuration google2piwik.conf déjà modifié précédemment.
5 – Importation des données
Notre fichier de config est bientôt complet afin de procéder à l’exportation des données de GA suivie de l’importation dans Piwik: il ne manque plus que la table_id correspondant à votre site dans Google Analytics.
Pour trouver la valeur ga: XXXXXXXX, il suffit de lancer la commande qui permettra de lister les ID de toutes les sites Analytics reliées au compte
[sourcecode language= »bash »]
./google2piwik.py -p
[/sourcecode]
Il ne reste plus qu’à reporter la valeur correspondante dans le fichier google2piwik.conf qui est maintenant complet.
A – Vérification
Pour vérifier que tous les paramètres sont correctes, la commande -c vérifira que les connexions à l’API Analytics ainsi qu’à votre base de données Piwik sur MySQL sont bien OK (croisez les doigts!!)
[sourcecode language= »bash »]
./google2piwik.py -c
[/sourcecode]
Vous devriez obtenir quelque chose comme ça:
Go!
Nous pouvons enfin lancer le script d’importation, ça peut être assez long…….soyez patients!
[sourcecode language= »bash »]
./google2piwik.py
[/sourcecode]
Vous verrez ensuite dans la console d’API Google un joli pic apparaître dans la section « Reports », it works !

Bonne importation à tous 😉
Sources et ressources utiles
Ce tutorial est en partie une adaptation de cet article : Import von Google Analytics Daten zu Piwik Analytik mit google2piwik mit der Google API v2.4 und API Key, merci à son auteur: Marius Cramer.
Pour une installation de Piwik, je vous recommande de suivre cet article de @nicolargo à cette adresse: Remplacer Google Analytics par Piwik.

