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
apt-get install python
ainsi que le module Mysql
apt-get install python-mysqldb
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/)
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
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 🙂
cd /home/aymeric wget http://clearcode.cc/google2piwik-1.2.5.tgz tar xvzf google2piwik-1.2.5.tgz
(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
[google] user_login = user user_pass = password table_id = ga:XXXXXXXX
et juste en dessous (sous table_id) la ligne suivante:
api_key = xxxxxxxxxxxxxxxxxxxxxxxx
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
# MySQL Piwik Database configuration [mysql] db = piwik host = localhost port = 3306 user = piwik passwd = xxxxxxxxxxxxxxxxxxx table_prefix = piwik
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
# 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
B – Le fichier config.py
Ensuite, il faut cherche les lignes suivantes (l.13 à 15):
MYSQL_CREDENTIALS = {} GOOGLE_USER = "" GOOGLE_PASS = ""
et y ajouter cette ligne
GOOGLE_KEY = ""
On modifiera également cette ligne (l.20):
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS
en la remplaçant par
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS, GOOGLE_KEY
enfin, il est nécessaire d’ajouter sous ces lignes (l.30 à 32):
GOOGLE_TABLE_ID = conf.get("google", "table_id") GOOGLE_USER = conf.get("google", "user_login") GOOGLE_PASS = conf.get("google", "user_pass")
la ligne suivante
GOOGLE_KEY = conf.get("google", "api_key")
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):
# if not config.GOOGLE_USER.split("@")[1] == "gmail.com": # print "Your e-mail address should be ending with @gmail.com" # exit()
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)
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'})
par
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})
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:
def PrintTableIDs(self): account_query = gdata.analytics.client.AccountFeedQuery() table_feed = self.client.GetAccountFeed(account_query) print "Google Analytics Table IDs for your Account\n" for entry in table_feed.entry: print "Site: %30s \t table_id: %s" % (entry.title.text, entry.table_id.text)
par
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 Account\n" for entry in table_feed.entry: print "Site: %30s \t table_id: %s" % (entry.GetProperty('ga:profileName').value, entry.GetProperty('dxp:tableId').value)
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:
host = 'www.google.com'
par
host = 'www.googleapis.com'
Ligne 135:
path = '/analytics/feeds/accounts/default'
par
path = '/analytics/v2.4/management/accounts'
Ligne 158:
path = '/analytics/feeds/data'
par
path = '/analytics/v2.4/data'
Ligne 179:
path = '/analytics/feeds/datasources/ga/accounts'
par
path = '/analytics/v2.4/management/accounts'
Ligne 248:
return ('/analytics/feeds/datasources/ga/accounts/%s/webproperties'
par
return ('/analytics/v2.4/management/accounts/%s/webproperties'
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
./google2piwik.py -p
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!!)
./google2piwik.py -c
Vous devriez obtenir quelque chose comme ça:
Go!
Nous pouvons enfin lancer le script d’importation, ça peut être assez long…….soyez patients!
./google2piwik.py
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.
As t-on une idée du volume (en Mo) de données stockées en base de données ?
Cela peut être un gros frein à l’utilisation de cette application.
Super tuto 🙂
Par contre j’ai quand même une réticence à l’utilisation de Piwik, outre le fait que l’on puisse difficilement allez aussi loin dans l’analyse des données (mais qui s’en sert vraiment à 100% ?).
L’outil ne bouffe-t-il pas énormément de ressources serveurs ?
Imaginons un blog qui donne 10’000 visites/jour, saurais-tu savoir qu’elle serait la charge serveur sur un mois, en gros sur un mutu ça parait complexe 😉
Et aussi l’impact sur les performances de ce genre d’application. A l’heure des VPS, du cloud etc… ça me semble fort contraignant d’utiliser Piwik pour des sites à fort trafic.
Depuis le temps que je le dis ! je fais référence à la premiere phrase de cet article bien sûr, ou pluto tuto complet pour migrer ou délocaliser de l’analytic. C’est du lourd évidemment en tout cas bien expliqué, le problème aussi ce sont les ressources peut-être pas pourtout le monde !
Pour la question de volume, les tables pouvant très rapidement peser plus de 10 Mo, pensez à
nettoyer régulièrement les archives. Sinon à part ce (petit) point noir, je ne vois pas d’obstacle à son utilisation !
@François, le fait de devoir « nettoyer régulièrement les archives » n’est pas un petit point noir, mais un très gros ! Comment suivre l’historique des visites si on est obligé de vider régulièrement les tables ?
Certes ce problème ne se pose pas pour des sites à faible trafic, mais dès qu’on arrive à 400/500 par jours, les poids des tables augmentent trop rapidement.
Effectivement, je vous l’accorde, tout dépend du nombre de visite/jour.
Nettoyer les tables est « une » solution parmi tant d’autres (hack pour limiter la croissance folle de vos archives par exemple, etc).
C’est bien Piwik, c’est complet, j’avais testé alors que ce n’étais qu’aux premières versions !
Par contre j’aurais aimé trouver des statistiques légères, pas forcement super complètes (visiteurs jours, viteurs venant de google, les mots tapés..) et qui permettent de voir beaucoup de sites d’un coup (par exemple un tableau avec sites et visites jours). Genre quand on à 40 sites a checker d’un coup et qu’on a juste besoin d’embrasser les données de base d’un coup d’oeil … Un idée ? A moins qu’il existe une fonction sur piwik ?
Pour checker plusieurs site d’un coup, rien de tel qu’un addin excel, pour GA mais aussi qui il me semble existe pour Piwik.
Sinon des alternatives à GA sont Getclicky, Woopra Sitemeter mais gratuites sous conditions et sur faibles volumes.
N’oublions pas que dans la vie, rien n’est gratuit, même pas les produits Google qui sont des Big Brother
Il faut quand même être un sacré geek pour installer ça et en plus il faut disposer d’un serveur dédié d’après ce que j’ai compris (le site de notre cabinet d’assurances est sur un hébergement mutualisé), est ce qu’il existe un script de statistique accessible au commun des mortels, nous aimerions vraiment bien remplacer analytics par un script hébergé en interne, puisque comme c’est parti avec google, analytics risque fort de devenir payant dans les prochains mois…
Si vous cherchez une solution alternative à Google Analytics, sur des budgets raisonnables, avec les garanties pour des entreprises qui souhaitent travailler sereinement, AT Internet (XiTi) est vraiment à considérer. Le budget débute à moins de 200€/mois pour un nombre de sites illimités, et un support client en France (et ailleurs)
Merci pour le tuto. Sympa.
A plus
Est-ce que le jeu en vaut la chandelle ?
je trouve la manipulation bien compliqué pour se tourner vers un outils qui n’est pas au yeux de tous le monde meilleur que l’analytics de google !
Dans le cas d’un site ecommerce, le schéma du tunnel de conversion de Google Analytics est très pratique, certes. Mais parfois, Piwik suffit bien amplement! Utilisez-vous réellement toutes les fonctions de Google Analytics?
Merci infiniment Aymeric pour ce tuto complet qui m’est vraiment très utile. Joyeux Noël et bonne continuation.
Vraiment pas mal ce petit outils d’analyse !je viens de l’installer, et je sens déjà que je vais vite oublier Google Analytics !Merci beaucoup.