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.

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

apt-get install python

[/pastacode]

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

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

apt-get install python-mysqldb

[/pastacode]

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.

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

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

[/pastacode]

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

[pastacode lang=“bash“ message=“google2piwik.conf“ highlight=““ provider=“manual“]

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

[/pastacode]

Noch den Eintrag

[pastacode lang=“bash“ message=“google2piwik.conf“ highlight=““ provider=“manual“]

api_key = xxxxxxxxxxxxxxxxxxxxxxxx

[/pastacode]

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

[pastacode lang=“bash“ message=“config.py“ highlight=““ provider=“manual“]

MYSQL_CREDENTIALS = {}
GOOGLE_USER = ""
GOOGLE_PASS = ""

[/pastacode]

den Eintrag ein:

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

GOOGLE_KEY = ""

[/pastacode]

Weiterhin ändern wir die Zeile

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS

[/pastacode]

zu

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

global MYSQL_CREDENTIALS, GOOGLE_USER, GOOGLE_PASS, GOOGLE_KEY

[/pastacode]

und zum Schluss fügen wir unterhalb von

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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

[/pastacode]

noch ein:

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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

[/pastacode]

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:

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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

[/pastacode]

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

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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'})

[/pastacode]

zu

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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})

[/pastacode]

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):

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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)

[/pastacode]

Der geänderte Codeteil sieht so aus:

[pastacode lang=“python“ message=“config.py“ highlight=““ provider=“manual“]

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)

[/pastacode]

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

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

host = 'www.google.com'

[/pastacode]

wird zu

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

host = 'www.googleapis.com'

[/pastacode]

Zeile 135

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

path = '/analytics/feeds/accounts/default'

[/pastacode]

wird zu

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

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

[/pastacode]

Zeile 158

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

path = '/analytics/feeds/data'

[/pastacode]

wird zu

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

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

[/pastacode]

Zeile 179

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

path = '/analytics/feeds/datasources/ga/accounts'

[/pastacode]

wird zu

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

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

[/pastacode]

Zeile 248

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

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

[/pastacode]

wird zu

[pastacode lang=“python“ message=“client.py“ highlight=““ provider=“manual“]

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

[/pastacode]

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

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

cp google2piwik.conf.sample google2piwik.conf

[/pastacode]

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.

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

./google2piwik.py -p

[/pastacode]

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

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

./google2piwik.py -c

[/pastacode]

Hierbei sollten keine Fehler auftreten.

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

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

./google2piwik.py

[/pastacode]

[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.
  1. Nach Absenden des Kommentar-Formulars erfolgt eine Verarbeitung der von Ihnen eingegebenen personenbezogenen Daten durch den datenschutzrechtlich Verantwortlichen zum Zweck der Bearbeitung Ihrer Anfrage auf Grundlage Ihrer durch das Absenden des Formulars erteilten Einwilligung.
    Weitere Informationen