don't require profile_name option
This commit is contained in:
parent
fd851678ba
commit
bf749dbf5c
36
README.rst
36
README.rst
|
@ -23,25 +23,25 @@ Installation
|
||||||
googleanalytics.id = UA-1010101-1
|
googleanalytics.id = UA-1010101-1
|
||||||
googleanalytics.username = googleaccount@gmail.com
|
googleanalytics.username = googleaccount@gmail.com
|
||||||
googleanalytics.password = googlepassword
|
googleanalytics.password = googlepassword
|
||||||
|
|
||||||
|
Note that your password will probably be readable by other people;
|
||||||
|
so you may want to set up a new gmail account specifically for
|
||||||
|
accessing your gmail profile.
|
||||||
|
|
||||||
|
There are two optional configuration settings (shown with their
|
||||||
|
default settings)::
|
||||||
|
|
||||||
googleanalytics.show_downloads = true
|
googleanalytics.show_downloads = true
|
||||||
# the following *must* match profile name in GA dashboard
|
googleanalytics.resource_prefix = /downloads/
|
||||||
googleanalytics.profile_name = mydomain.com
|
|
||||||
|
|
||||||
That last comment is worth emphasising. Due to the strange
|
|
||||||
relationship between tracking IDs and profiles, you need to get
|
|
||||||
that right. It's the relevant value in the "Name" column for the
|
|
||||||
list of "Website Profiles" that you see when you click on an
|
|
||||||
Analytics Account link in the Google Analytics homepage.
|
|
||||||
E.g. you'll need two clicks from the analytics home page to see the
|
|
||||||
profile name. Sometimes your profile name might have a trailing
|
|
||||||
slash; you need to include that, too, if so.
|
|
||||||
|
|
||||||
Note also that your password will probably be readable by other
|
|
||||||
people; so you may want to set up a new gmail account specifically
|
|
||||||
for accessing your gmail profile.
|
|
||||||
|
|
||||||
If ``show_downloads`` is set, a download count for resources will
|
If ``show_downloads`` is set, a download count for resources will
|
||||||
be displayed on individual package pages.
|
be displayed on individual package pages.
|
||||||
|
|
||||||
|
``resource_prefix`` is an arbitrary identifier so that we can query
|
||||||
|
for downloads in Google Analytics. It can theoretically be any
|
||||||
|
string, but should ideally resemble a URL path segment, to make
|
||||||
|
filtering for all resources easier in the Google Analytics web
|
||||||
|
interface.
|
||||||
|
|
||||||
3. Wait a day or so for some stats to be recorded in Google
|
3. Wait a day or so for some stats to be recorded in Google
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ Installation
|
||||||
remember to run it by hand!
|
remember to run it by hand!
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
=======
|
=======
|
||||||
|
|
||||||
There are some very high-level functional tests that you can run using::
|
There are some very high-level functional tests that you can run using::
|
||||||
|
|
||||||
|
@ -85,3 +85,7 @@ into any of its features. For example, as a measure of popularity, we
|
||||||
could record bounce rate, or new visits only; we could also display
|
could record bounce rate, or new visits only; we could also display
|
||||||
which datasets are popular where, or highlight packages that have been
|
which datasets are popular where, or highlight packages that have been
|
||||||
linked to from other locations.
|
linked to from other locations.
|
||||||
|
|
||||||
|
We could also embed extra metadata information in tracking links, to
|
||||||
|
enable reports on particular types of data (e.g. most popular data
|
||||||
|
format by country of origin, or most downloaded resource by license)
|
||||||
|
|
|
@ -23,7 +23,7 @@ class LoadAnalytics(CkanCommand):
|
||||||
min_args = 0
|
min_args = 0
|
||||||
TEST_HOST = None
|
TEST_HOST = None
|
||||||
CONFIG = pylonsconfig
|
CONFIG = pylonsconfig
|
||||||
|
|
||||||
def command(self):
|
def command(self):
|
||||||
self._load_config()
|
self._load_config()
|
||||||
self.resource_url_tag = self.CONFIG.get(
|
self.resource_url_tag = self.CONFIG.get(
|
||||||
|
@ -37,11 +37,16 @@ class LoadAnalytics(CkanCommand):
|
||||||
self.parse_and_save()
|
self.parse_and_save()
|
||||||
|
|
||||||
def parse_and_save(self):
|
def parse_and_save(self):
|
||||||
|
"""Grab raw data from Google Analytics and save to the
|
||||||
|
database
|
||||||
|
"""
|
||||||
packages_data = self.get_ga_data()
|
packages_data = self.get_ga_data()
|
||||||
self.save_ga_data(packages_data)
|
self.save_ga_data(packages_data)
|
||||||
log.info("Saved %s records from google" % len(packages_data))
|
log.info("Saved %s records from google" % len(packages_data))
|
||||||
|
|
||||||
def save_ga_data(self, packages_data):
|
def save_ga_data(self, packages_data):
|
||||||
|
"""Save tuples of packages_data to the database
|
||||||
|
"""
|
||||||
dbutil.init_tables()
|
dbutil.init_tables()
|
||||||
for identifier, visits in packages_data.items():
|
for identifier, visits in packages_data.items():
|
||||||
recently = visits.get('recent', 0)
|
recently = visits.get('recent', 0)
|
||||||
|
@ -69,11 +74,14 @@ class LoadAnalytics(CkanCommand):
|
||||||
model.Session.commit()
|
model.Session.commit()
|
||||||
|
|
||||||
def setup_ga_connection(self):
|
def setup_ga_connection(self):
|
||||||
|
"""Log into the Google Data API, and find out the ``table_id``
|
||||||
|
that is associated with the profile, for later querying
|
||||||
|
"""
|
||||||
SOURCE_APP_NAME = "CKAN Google Analytics Plugin"
|
SOURCE_APP_NAME = "CKAN Google Analytics Plugin"
|
||||||
username = self.CONFIG.get('googleanalytics.username')
|
username = self.CONFIG.get('googleanalytics.username')
|
||||||
password = self.CONFIG.get('googleanalytics.password')
|
password = self.CONFIG.get('googleanalytics.password')
|
||||||
profile_name = self.CONFIG.get('googleanalytics.profile_name')
|
ga_id = self.CONFIG.get('googleanalytics.id')
|
||||||
if not username or not password or not profile_name:
|
if not username or not password or not ga_id:
|
||||||
raise Exception("No googleanalytics profile info in config")
|
raise Exception("No googleanalytics profile info in config")
|
||||||
if self.TEST_HOST:
|
if self.TEST_HOST:
|
||||||
my_client = client.AnalyticsClient(source=SOURCE_APP_NAME,
|
my_client = client.AnalyticsClient(source=SOURCE_APP_NAME,
|
||||||
|
@ -87,16 +95,18 @@ class LoadAnalytics(CkanCommand):
|
||||||
feed = my_client.GetAccountFeed(account_query)
|
feed = my_client.GetAccountFeed(account_query)
|
||||||
table_id = None
|
table_id = None
|
||||||
for entry in feed.entry:
|
for entry in feed.entry:
|
||||||
if entry.title.text == profile_name:
|
if entry.get_property("ga:webPropertyId").value == ga_id:
|
||||||
table_id = entry.table_id.text
|
table_id = entry.table_id.text
|
||||||
break
|
break
|
||||||
if not table_id:
|
if not table_id:
|
||||||
msg = "Couldn't find a profile called '%s'" % profile_name
|
msg = "Couldn't find a profile with id '%s'" % ga_id
|
||||||
raise Exception(msg)
|
raise Exception(msg)
|
||||||
self.table_id = table_id
|
self.table_id = table_id
|
||||||
self.client = my_client
|
self.client = my_client
|
||||||
|
|
||||||
def ga_query(self, query_filter=None, from_date=None):
|
def ga_query(self, query_filter=None, from_date=None):
|
||||||
|
"""Executie a query against Google Analytics
|
||||||
|
"""
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
to_date = now.strftime("%Y-%m-%d")
|
to_date = now.strftime("%Y-%m-%d")
|
||||||
metrics = 'ga:visits,ga:visitors,ga:newVisits,ga:uniquePageviews'
|
metrics = 'ga:visits,ga:visitors,ga:newVisits,ga:uniquePageviews'
|
||||||
|
@ -113,7 +123,11 @@ class LoadAnalytics(CkanCommand):
|
||||||
return feed
|
return feed
|
||||||
|
|
||||||
def get_ga_data(self, query_filter=None):
|
def get_ga_data(self, query_filter=None):
|
||||||
"""Return a dictionary like
|
"""Get raw data from Google Analtyics for packages and
|
||||||
|
resources, and for both the last two weeks and ever.
|
||||||
|
|
||||||
|
Returns a dictionary like::
|
||||||
|
|
||||||
{'identifier': {'recent':3, 'ever':6}}
|
{'identifier': {'recent':3, 'ever':6}}
|
||||||
"""
|
"""
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
<ns0:feed ns1:etag="W/"CkQNRHo4fSp7I2A9WhZTEEw."" ns1:kind="analytics#accounts" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://schemas.google.com/g/2005"><ns0:updated>2011-03-13T01:59:55.435-08:00</ns0:updated><ns0:id>http://www.google.com/analytics/feeds/accounts/seb.bacon@okfn.org</ns0:id><ns0:generator version="1.0">Google Analytics</ns0:generator><ns0:author><ns0:name>Google Analytics</ns0:name></ns0:author><ns0:link href="https://www.google.com/analytics/feeds/accounts/default?max-results=300" rel="self" type="application/atom+xml" /><ns2:segment id="gaid::-1" name="All Visits" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition> </ns2:definition></ns2:segment><ns2:segment id="gaid::-2" name="New Visitors" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:visitorType==New Visitor</ns2:definition></ns2:segment><ns2:segment id="gaid::-3" name="Returning Visitors" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:visitorType==Returning Visitor</ns2:definition></ns2:segment><ns2:segment id="gaid::-4" name="Paid Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==cpa,ga:medium==cpc,ga:medium==cpm,ga:medium==cpp,ga:medium==cpv,ga:medium==ppc</ns2:definition></ns2:segment><ns2:segment id="gaid::-5" name="Non-paid Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==organic</ns2:definition></ns2:segment><ns2:segment id="gaid::-6" name="Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==cpa,ga:medium==cpc,ga:medium==cpm,ga:medium==cpp,ga:medium==cpv,ga:medium==organic,ga:medium==ppc</ns2:definition></ns2:segment><ns2:segment id="gaid::-7" name="Direct Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==(none)</ns2:definition></ns2:segment><ns2:segment id="gaid::-8" name="Referral Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==referral</ns2:definition></ns2:segment><ns2:segment id="gaid::-9" name="Visits with Conversions" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:goalCompletionsAll>0</ns2:definition></ns2:segment><ns2:segment id="gaid::-10" name="Visits with Transactions" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:transactions>0</ns2:definition></ns2:segment><ns2:segment id="gaid::-11" name="Mobile Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:isMobile==Yes</ns2:definition></ns2:segment><ns2:segment id="gaid::-12" name="Non-bounce Visits" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:bounces==0</ns2:definition></ns2:segment><ns2:startIndex xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:startIndex><ns2:totalResults xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:totalResults><ns2:itemsPerPage xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">300</ns2:itemsPerPage><ns0:entry ns1:etag="W/"CkQNRHo4fSp7I2A9WhZTEEw."" ns1:kind="analytics#account"><ns0:id>http://www.google.com/analytics/feeds/accounts/ga:42156377</ns0:id><ns2:tableId xmlns:ns2="http://schemas.google.com/analytics/2009">ga:42156377</ns2:tableId><ns0:updated>2011-03-13T01:59:55.435-08:00</ns0:updated><ns2:property name="ga:accountId" value="21313878" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:accountName" value="borf" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:profileId" value="42156377" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:webPropertyId" value="UA-21313878-1" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:currency" value="USD" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:timezone" value="Europe/London" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>borf</ns0:title><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry><ns0:title>Profile list for seb.bacon@okfn.org</ns0:title></ns0:feed>
|
<ns0:feed ns1:etag="W/"CkQNRHo4fSp7I2A9WhZTEEw."" ns1:kind="analytics#accounts" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://schemas.google.com/g/2005"><ns0:updated>2011-03-13T01:59:55.435-08:00</ns0:updated><ns0:id>http://www.google.com/analytics/feeds/accounts/seb.bacon@okfn.org</ns0:id><ns0:generator version="1.0">Google Analytics</ns0:generator><ns0:author><ns0:name>Google Analytics</ns0:name></ns0:author><ns0:link href="https://www.google.com/analytics/feeds/accounts/default?max-results=300" rel="self" type="application/atom+xml" /><ns2:segment id="gaid::-1" name="All Visits" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition> </ns2:definition></ns2:segment><ns2:segment id="gaid::-2" name="New Visitors" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:visitorType==New Visitor</ns2:definition></ns2:segment><ns2:segment id="gaid::-3" name="Returning Visitors" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:visitorType==Returning Visitor</ns2:definition></ns2:segment><ns2:segment id="gaid::-4" name="Paid Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==cpa,ga:medium==cpc,ga:medium==cpm,ga:medium==cpp,ga:medium==cpv,ga:medium==ppc</ns2:definition></ns2:segment><ns2:segment id="gaid::-5" name="Non-paid Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==organic</ns2:definition></ns2:segment><ns2:segment id="gaid::-6" name="Search Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==cpa,ga:medium==cpc,ga:medium==cpm,ga:medium==cpp,ga:medium==cpv,ga:medium==organic,ga:medium==ppc</ns2:definition></ns2:segment><ns2:segment id="gaid::-7" name="Direct Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==(none)</ns2:definition></ns2:segment><ns2:segment id="gaid::-8" name="Referral Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:medium==referral</ns2:definition></ns2:segment><ns2:segment id="gaid::-9" name="Visits with Conversions" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:goalCompletionsAll>0</ns2:definition></ns2:segment><ns2:segment id="gaid::-10" name="Visits with Transactions" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:transactions>0</ns2:definition></ns2:segment><ns2:segment id="gaid::-11" name="Mobile Traffic" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:isMobile==Yes</ns2:definition></ns2:segment><ns2:segment id="gaid::-12" name="Non-bounce Visits" xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:definition>ga:bounces==0</ns2:definition></ns2:segment><ns2:startIndex xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:startIndex><ns2:totalResults xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:totalResults><ns2:itemsPerPage xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">300</ns2:itemsPerPage><ns0:entry ns1:etag="W/"CkQNRHo4fSp7I2A9WhZTEEw."" ns1:kind="analytics#account"><ns0:id>http://www.google.com/analytics/feeds/accounts/ga:42156377</ns0:id><ns2:tableId xmlns:ns2="http://schemas.google.com/analytics/2009">ga:42156377</ns2:tableId><ns0:updated>2011-03-13T01:59:55.435-08:00</ns0:updated><ns2:property name="ga:accountId" value="21313878" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:accountName" value="borf" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:profileId" value="42156377" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:webPropertyId" value="UA-borf-1" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:currency" value="USD" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:property name="ga:timezone" value="Europe/London" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>borf</ns0:title><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry><ns0:title>Profile list for seb.bacon@okfn.org</ns0:title></ns0:feed>
|
||||||
|
|
|
@ -49,8 +49,8 @@ class TestLoadCommand:
|
||||||
= 'borf'
|
= 'borf'
|
||||||
config.local_conf['googleanalytics.password'] \
|
config.local_conf['googleanalytics.password'] \
|
||||||
= 'borf'
|
= 'borf'
|
||||||
config.local_conf['googleanalytics.profile_name'] \
|
config.local_conf['googleanalytics.id'] \
|
||||||
= 'borf'
|
= 'UA-borf-1'
|
||||||
config.local_conf['googleanalytics.show_downloads'] \
|
config.local_conf['googleanalytics.show_downloads'] \
|
||||||
= 'true'
|
= 'true'
|
||||||
cls.config = config.local_conf
|
cls.config = config.local_conf
|
||||||
|
|
Loading…
Reference in New Issue