OSDN Git Service

c0b75ded5629d568cefae482e768eed26b356190
[otptools/sfmstat.git] / fetch_analytics.py
1 #!/usr/bin/env python
2
3 import sys
4 import getpass
5 import datetime
6
7 # see http://code.google.com/intl/ja/apis/analytics/docs/gdata/gdataDeveloperGuide.html
8 import gdata.analytics.client
9 import gdata.sample_util
10
11 from data2db import GACacheDB
12
13 APP_NAME = "ganal_test"
14 #url = "http://sourceforge.jp/magazine/10/04/20/1033216"
15
16 def get_data_by_day(cli, year, month, day):
17     baseurl = "/magazine/%02d/%02d/%02d/"
18     url = baseurl % (year-2000, month, day)
19
20     day_start = datetime.date(year, month, day)
21     day_end = day_start + datetime.timedelta(31)
22     return get_data_feed(cli, url, day_start.isoformat(), day_end.isoformat())
23
24 def get_data_feed(cli, url, start_date, end_date):
25
26     print url + " : " + start_date + " to " + end_date
27
28     table_id = "ga:1443341" # sourceforge.jp
29     max_results = 1000
30     # url = "http://sourceforge.jp/magazine/10/04/20/1033216"
31     data_query = gdata.analytics.client.DataFeedQuery({
32             'ids': table_id,
33             'start-date': start_date,
34             'end-date': end_date,
35             'dimensions': 'ga:pagePath,ga:date',
36             'metrics': 'ga:pageviews,ga:visits',
37             'sort': 'ga:pagePath',
38             'filters': "ga:pagePath=@" + url,
39             'max-results': max_results})
40
41     feed = cli.GetDataFeed(data_query)
42
43     result = []
44     for ent in feed.entry:
45         path = ent.get_object("ga:pagePath").value
46         date = ent.get_object("ga:date").value
47         pv = ent.get_object("ga:pageviews").value
48         visits = ent.get_object("ga:visits").value
49         result.append((path, date, pv, visits))
50     return result
51
52
53 def main():
54     try:
55         email = sys.argv[1]
56     except IndexError:
57         sys.exit("%s username" % sys.argv[0])
58
59     passwd = getpass.getpass()
60     cli = gdata.analytics.client.AnalyticsClient(source=APP_NAME)
61
62     # login
63     try:
64         cli.client_login(email, passwd, APP_NAME)
65     except gdata.client.BadAuthentication:
66         exit('Invalid user credentials given.')
67     except gdata.client.Error:
68         exit('Login Error')
69
70     start_date = datetime.date(2010, 8, 31)
71 #    start_date = datetime.date(2010, 3, 1)
72     term = 60
73 #    term = 10
74 #    f = open("result.txt", "w")
75
76     db = GACacheDB()
77     with db:
78         for d in range(term):
79             td = datetime.timedelta(d)
80             target = start_date + td
81             l = get_data_by_day(cli, target.year, target.month, target.day)
82             for item in l:
83 #                try:
84                 db.add(url=item[0],
85                        date=item[1],
86                        pageviews=item[2],
87                        visits=item[3])
88 #                    f.write(st)
89 #                except UnicodeEncodeError:
90 #                    f.write(st.encode("utf-8"))
91
92 #    f.close()
93
94 if __name__ == "__main__":
95     main()