don't require profile_name option
This commit is contained in:
parent
fd851678ba
commit
bf749dbf5c
34
README.rst
34
README.rst
|
@ -23,26 +23,26 @@ Installation
|
|||
googleanalytics.id = UA-1010101-1
|
||||
googleanalytics.username = googleaccount@gmail.com
|
||||
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
|
||||
# the following *must* match profile name in GA dashboard
|
||||
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.
|
||||
googleanalytics.resource_prefix = /downloads/
|
||||
|
||||
If ``show_downloads`` is set, a download count for resources will
|
||||
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
|
||||
|
||||
4. Import Google stats by running the following command from
|
||||
|
@ -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
|
||||
which datasets are popular where, or highlight packages that have been
|
||||
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)
|
||||
|
|
|
@ -37,11 +37,16 @@ class LoadAnalytics(CkanCommand):
|
|||
self.parse_and_save()
|
||||
|
||||
def parse_and_save(self):
|
||||
"""Grab raw data from Google Analytics and save to the
|
||||
database
|
||||
"""
|
||||
packages_data = self.get_ga_data()
|
||||
self.save_ga_data(packages_data)
|
||||
log.info("Saved %s records from google" % len(packages_data))
|
||||
|
||||
def save_ga_data(self, packages_data):
|
||||
"""Save tuples of packages_data to the database
|
||||
"""
|
||||
dbutil.init_tables()
|
||||
for identifier, visits in packages_data.items():
|
||||
recently = visits.get('recent', 0)
|
||||
|
@ -69,11 +74,14 @@ class LoadAnalytics(CkanCommand):
|
|||
model.Session.commit()
|
||||
|
||||
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"
|
||||
username = self.CONFIG.get('googleanalytics.username')
|
||||
password = self.CONFIG.get('googleanalytics.password')
|
||||
profile_name = self.CONFIG.get('googleanalytics.profile_name')
|
||||
if not username or not password or not profile_name:
|
||||
ga_id = self.CONFIG.get('googleanalytics.id')
|
||||
if not username or not password or not ga_id:
|
||||
raise Exception("No googleanalytics profile info in config")
|
||||
if self.TEST_HOST:
|
||||
my_client = client.AnalyticsClient(source=SOURCE_APP_NAME,
|
||||
|
@ -87,16 +95,18 @@ class LoadAnalytics(CkanCommand):
|
|||
feed = my_client.GetAccountFeed(account_query)
|
||||
table_id = None
|
||||
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
|
||||
break
|
||||
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)
|
||||
self.table_id = table_id
|
||||
self.client = my_client
|
||||
|
||||
def ga_query(self, query_filter=None, from_date=None):
|
||||
"""Executie a query against Google Analytics
|
||||
"""
|
||||
now = datetime.datetime.now()
|
||||
to_date = now.strftime("%Y-%m-%d")
|
||||
metrics = 'ga:visits,ga:visitors,ga:newVisits,ga:uniquePageviews'
|
||||
|
@ -113,7 +123,11 @@ class LoadAnalytics(CkanCommand):
|
|||
return feed
|
||||
|
||||
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}}
|
||||
"""
|
||||
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'
|
||||
config.local_conf['googleanalytics.password'] \
|
||||
= 'borf'
|
||||
config.local_conf['googleanalytics.profile_name'] \
|
||||
= 'borf'
|
||||
config.local_conf['googleanalytics.id'] \
|
||||
= 'UA-borf-1'
|
||||
config.local_conf['googleanalytics.show_downloads'] \
|
||||
= 'true'
|
||||
cls.config = config.local_conf
|
||||
|
|
Loading…
Reference in New Issue