TechLife devBlog

Sumowanie statystyk Google Analytics

Internet 20th Nov 2009

Zawsze mnie ciekawiło jaki jest ruch na naszym firmowym serwerze ale nie chciałem obciążać maszyny dodatkowym oprogramowaniem, które by to zliczało. Zwłaszcza że każda hostowana przez nas strona jest podpięta pod Google Analytics. Nie znalazłem jednak sposobu aby w panelu statystyk wyświetlić sumę odwiedzin z kilku kont. Na szczęście Analytics podobnie jak większość usług Googla ma swoje API. Wystarczyło więc zaprząc do pracy Pythona oraz bibliotekę gdata.

Użytkownikom ArchLinuksa polecam paczkę python-gdata-svn

yaourt -S python-gdata-svn

Skrypt jest dość prosty i działa w konsoli:

#!/usr/bin/python

import datetime
import sys

import gdata.analytics
import gdata.analytics.service

def main(argv):

    GOOGLE_ANALYTICS_LOGIN = 'TWOJE@KONTO'
    GOOGLE_ANALYTICS_PASSWORD = 'TAJNE_HASLO'

    if len(argv) > 1:
        d = argv[1].split('-')
        data = datetime.date(int(d[0]), int(d[1]), int(d[2]))
    else:
        data = datetime.datetime.now()

    print "\ndata: %d-%d-%d" % (data.year, data.month, data.day)
    print "\nodw\tods\tdomena"
    print "--------------------------"

    dc = gdata.analytics.service.AnalyticsDataService()
    dc.ClientLogin(GOOGLE_ANALYTICS_LOGIN, GOOGLE_ANALYTICS_PASSWORD, account_type='GOOGLE')
    a = dc.GetAccountList()

    odwiedziny, odslony = [], []

    for b in a.entry:
        tid = b.id.text.replace('http://www.google.com/analytics/feeds/accounts/','')
        query = dc.GetData(
            ids=tid, 
            start_date='%.4d-%.2d-%.2d' % (data.year, data.month, data.day), 
            end_date='%.4d-%.2d-%.2d' % (data.year, data.month, data.day), 
            metrics='ga:visitors,ga:pageviews',
            dimensions='ga:day'
        )
        odw = int(query.entry[0].visitors.value)
        ods = int(query.entry[0].pageviews.value)
        odwiedziny.append(odw)
        odslony.append(ods)
        print "\033[1;31m%d\t%d\033[0m\t\033[33m%s\033[0m" % (odw, ods, b.title.text)

    print "--------------------------"
    print "%d\t%d\tRazem" % (sum(odwiedziny),sum(odslony))

if __name__ == "__main__":
    sys.exit(main(sys.argv))

Jeżeli wywoła się go bez parametrów wówczas pokaże statystyki dla dnia dzisiejszego. Można też podać mu jako parametr datę, np:

python stats.py 2012-12-21

Przykładowy wynik działania wygląda tak:
Przykład działania

Komentarze z jogger.pl

mlen 08.02.2010 / 21:30

dzieki, z checia uzyje. btw dzis myslalem o podobnym skrypcie :)



Komentarze