2 Reaktionen

Import von Google Analytics Daten zu Piwik Analytik mit google2piwik mit der Google API v2.4 und API Key

Geschätzte Lesedauer:

Wir haben gewechselt. Soll heißen, wir nutzen nun Piwik für unsere Seiten und stellen die Nutzung von Google Analytics ein. Allerdings wollten wir natürlich auf die bisherigen Daten aus Analytics in der neue Statistik-Oberfläche nicht verzichten. Glücklicherweise stellt Google eine API zur verfügung um Daten aus Analytics (und anderen Produkten) auszulesen.

Unter http://clearcode.cc/offer/open-source-projects/google2piwik/ gibt es ein tolles Importskript, das diese Arbeiten übernimmt. Ein Nachteil ist, dass die Version schon etwas älter ist und eine veraltete Version der Google API verwendet. Dies führte bei uns dazu, dass schon nach kurzer Zeit das Abfragenkontingent (Quota) von 10.000 Abfragen erschöpft war.
Die neuere API bietet ganze 50.000 Abfragen pro Tag, wird aber nicht ohne selbst Hand anzulegen vom Importer unterstützt. Daher haben wir selbst ein paar Änderungen vorgenommen, die wir hier mit euch teilen wollen.

Zuerst einmal müssen wir jedoch die Nutzung des Skripts auf dem Server vorbereiten. Ich zeige das Vorgehen anhand einer Debian Squeeze Installation, auf anderen Systemen sollte es ähnlich funktionieren.

Installation der benötigten Software

Zuerst einmal benötigen wir natürlich Python, da es sich beim Importer um ein Pythonskript handelt.

Kommandozeile
apt-get install python

Weiterhin benötigen wir ein Python Modul für den Datenbankzugriff

Kommandozeile
apt-get install python-mysqldb

Nun fehlt noch das Python Modul für den Zugriff auf die Google API, die aktuellste Version war zum Zeitpunkt dieses Artikels 2.0.17.

Kommandozeile
cd /tmp
wget https://gdata-python-client.googlecode.com/files/gdata-2.0.17.tar.gz
tar xvzf gdata-2.0.17.tar.gz
cd gdata-2.0.17
./setup.py install

Anpassung der Module und des Importskripts

Um das Skript und das Modul mit der API v2.4 verwenden zu können sind einige Änderungen am Code notwendig.

Konfigurationsdatei (google2piwik.conf)

Da wir für die neue API einen API Key verwenden müssen, muss dieser auch in die Konfigurationsdatei eingetragen werden.
Hier fügen wir unter den Einträgen

google2piwik.conf
[google]
user_login = mail@domain.de
user_pass  = analyticspasswort
table_id   = ga:xxxxxxx

Noch den Eintrag

google2piwik.conf
api_key = xxxxxxxxxxxxxxxxxxxxxxxx

ein (xxxxxxxxxxxxxxxxxxxxxxx ist natürlich euer API Key).

Damit dieser Eintrag auch im Script zur Verfügung steht, müssen wir die Datei config.py anpassen.
Hier fügen wir unter

config.py
MYSQL_CREDENTIALS = {}
GOOGLE_USER = ""
GOOGLE_PASS = ""

den Eintrag ein:

config.py
GOOGLE_KEY = ""

Weiterhin ändern wir die Zeile

config.py
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS

zu

config.py
global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS, GOOGLE_KEY

und zum Schluss fügen wir unterhalb von

config.py
GOOGLE_TABLE_ID = conf.get("google", "table_id")
GOOGLE_USER = conf.get("google", "user_login")
GOOGLE_PASS = conf.get("google", "user_pass")

noch ein:

config.py
GOOGLE_KEY = conf.get("google", "api_key")

Hier ist die geänderte Datei zum Download (auf eigene Gefahr): config.py

Änderung des Importskripts

Per default erlaubt das Importskript nur Logins mit einer @gmail.com Adresse. Um dies zu ändern müssen im Script nur die drei Zeilen 577 bis 579 auskommentiert werden:

config.py
#        if not config.GOOGLE_USER.split("@")[1] == "gmail.com":
#            print "Your e-mail address should be ending with @gmail.com"
#            exit()

Nun müssen wir bei den Anfragen an die API den API-Key mit übergeben. Dies geschieht, indem wir einen zusätzlichen Parameter bei der Funktion DataFeedQuery angeben.
Wir ändern also

config.py
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'})

zu

config.py
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})

Dieser Paremeter muss 2x hinzugefügt werden, einmal zur Funktion in Zeile 471 und einmal in Zeile 482.

Leider funktioniert auch die Abfrage der Table-IDs nicht mehr auf die alte Art. Diese werden für den eigentlichen Import benötigt, damit das Skript weiß welche Daten exportiert werden sollen. Um das Auslesen der Table-IDs wieder zu ermöglichen muss dieser Teil des Skriptes angepasst werden (ca. ab Zeile 518):

config.py
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)

Der geänderte Codeteil sieht so aus:

config.py
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)

Hier ist die geänderte Datei zum Download (auf eigene Gefahr): google2piwik.py

Änderung des Google API Python Moduls

Im Google Modul müssen wir nicht allzu viel ändern, lediglich der Servername (host) und die Pfade für die Abfragen müssen angepasst werden.
Hier die Liste der Änderungen der datei analytics/client.py in Kurzform. Die Datei befindet sich in unserer Installation in /usr/local/lib/python2.6/dist-packages/gdata/analytics/client.py

Zeile 116

client.py
host = 'www.google.com'

wird zu

client.py
host = 'www.googleapis.com'

Zeile 135

client.py
path = '/analytics/feeds/accounts/default'

wird zu

client.py
path = '/analytics/v2.4/management/accounts'

Zeile 158

client.py
path = '/analytics/feeds/data'

wird zu

client.py
path = '/analytics/v2.4/data'

Zeile 179

client.py
path = '/analytics/feeds/datasources/ga/accounts'

wird zu

client.py
path = '/analytics/v2.4/management/accounts'

Zeile 248

client.py
return ('/analytics/feeds/datasources/ga/accounts/%s/webproperties'

wird zu

client.py
return ('/analytics/v2.4/management/accounts/%s/webproperties'

Es gibt zwar noch mehr Zeilen, die die alte Form haben, da diese für das Importskript nicht benötigt werden, haben wir sie jedoch in Ruhe gelassen.
Hier ist die geänderte Datei zum Download (auf eigene Gefahr): client.py

API-Key

Für den Zugriff auf die neue API benötigen wir einen API-Key. Diesen kann man hier erstellen bzw. einsehen:
https://code.google.com/apis/console/ -> API Access
Unter dem Menüpunkt „Services“ in der API Console muss nun noch der Schalter bei Analytics API auf „on“ gestellt werden.

Den API Key tragen wir nun in unserer config Datei (google2piwik.conf) ein. Sollte diese Datei noch fehlen, einfach die Beispiel-Konfiguration mit dem Befehl

Kommandozeile
cp google2piwik.conf.sample google2piwik.conf

kopieren und den Inhalt anpassen.

Import

Nachdem wir alle notwendigen Daten in der Config Datei eingetragen haben, fehlt uns noch die Information „table_id“. Hier steht bislang nur ga:XXXXXXXX.
Um eine Auflistung aller in unserem Account verfügbaren Table-IDs zu bekommen, führen wir das Importskript mit dem Parameter -p aus.

Kommandozeile
./google2piwik.py -p

Wir sollten nun eine Auflistung aller verfügbaren Accounts mit den Table-IDs bekommen. Die Table-ID der gewünschten Seite tragen wir nun in unserer Konfigurationsdatei ein, zum Beispiel ga:123456789.
Am Ende der Konfigurationsdatei muss nun noch die ID der Seite in Piwik und die URL angegeben werden. Diese sieht man in der Piwik Oberfläche nach dem Erstellen der Seite in der ersten Spalte der Seitenauflistung.

Ob wir alles richtig gemacht haben, sehen wir mit dem Check-Befehl, dem Aufruf des Importskripts mit dem Parameter -c

Kommandozeile
./google2piwik.py -c

Hierbei sollten keine Fehler auftreten.

Sind alle Einstellungen korrekt können wir mit dem Import beginnen (und das kann laaaaaaange dauern…).

Kommandozeile
./google2piwik.py

[notify_box font_size=“13px“ style=“yellow“]Achtung! Vor Start des Imports sollte die Seite in Piwik auf die Zeitzone UTC gestellt werden, um die Daten korrekt zu importieren. Nach dem Import kann die Zeitzone dann wieder zurückgestellt werden.[/notify_box]

Unter https://code.google.com/apis/console/ und dem Menüpunkt Reports bzw. Quotas müssten beim Import nun die Anfragen nach oben gehen – ein Zeichen dafür, dass nun die neue API mit API-Key verwendet wird.

Viel Erfolg beim Importieren und viel Spaß mit Piwik.

Nachtrag: Das Importieren dauert unter Umständen ewig lange. In einem zweiten Artikel gibt es einen Tipp zum Beschleunigen.

Dieser Artikel wurde von Marius Burkard verfasst.

Marius Burkard ist Diplom-Wirtschaftsinformatiker und arbeitet seit 2006 als selbstständiger Software-Entwickler und Linux-Server-Administrator mit der Firma pixcept KG. Er ist unter anderem mitverantwortlich für die Projekte Was-lese-ich.de und ISPProtect.

Und jetzt du! Deine Meinung?

Erforderliche Felder sind mit einem Asterisk (*) gekennzeichnet. Die E-Mail-Adresse wird nicht veröffentlicht.