314 lines
9.6 KiB
Python
314 lines
9.6 KiB
Python
#!/usr/bin/python
|
|
#
|
|
# Copyright 2010 Google Inc. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""Streamlines requests to the Google Analytics APIs."""
|
|
|
|
__author__ = 'api.nickm@google.com (Nick Mihailovski)'
|
|
|
|
|
|
import atom.data
|
|
import gdata.client
|
|
import gdata.analytics.data
|
|
import gdata.gauth
|
|
|
|
|
|
class AnalyticsClient(gdata.client.GDClient):
|
|
"""Client extension for the Google Analytics API service."""
|
|
|
|
api_version = '2'
|
|
auth_service = 'analytics'
|
|
auth_scopes = gdata.gauth.AUTH_SCOPES['analytics']
|
|
account_type = 'GOOGLE'
|
|
|
|
def __init__(self, auth_token=None, **kwargs):
|
|
"""Initializes a new client for the Google Analytics Data Export API.
|
|
|
|
Args:
|
|
auth_token: gdata.gauth.ClientLoginToken, AuthSubToken, or
|
|
OAuthToken (optional) Authorizes this client to edit the user's data.
|
|
kwargs: The other parameters to pass to gdata.client.GDClient
|
|
constructor.
|
|
"""
|
|
|
|
gdata.client.GDClient.__init__(self, auth_token=auth_token, **kwargs)
|
|
|
|
def get_account_feed(self, feed_uri, auth_token=None, **kwargs):
|
|
"""Makes a request to the Analytics API Account Feed.
|
|
|
|
Args:
|
|
feed_uri: str or gdata.analytics.AccountFeedQuery The Analytics Account
|
|
Feed uri to define what data to retrieve from the API. Can also be
|
|
used with a gdata.analytics.AccountFeedQuery object.
|
|
"""
|
|
|
|
return self.get_feed(feed_uri,
|
|
desired_class=gdata.analytics.data.AccountFeed,
|
|
auth_token=auth_token,
|
|
**kwargs)
|
|
|
|
GetAccountFeed = get_account_feed
|
|
|
|
def get_data_feed(self, feed_uri, auth_token=None, **kwargs):
|
|
"""Makes a request to the Analytics API Data Feed.
|
|
|
|
Args:
|
|
feed_uri: str or gdata.analytics.AccountFeedQuery The Analytics Data
|
|
Feed uri to define what data to retrieve from the API. Can also be
|
|
used with a gdata.analytics.AccountFeedQuery object.
|
|
"""
|
|
|
|
return self.get_feed(feed_uri,
|
|
desired_class=gdata.analytics.data.DataFeed,
|
|
auth_token=auth_token,
|
|
**kwargs)
|
|
|
|
GetDataFeed = get_data_feed
|
|
|
|
def get_management_feed(self, feed_uri, auth_token=None, **kwargs):
|
|
"""Makes a request to the Google Analytics Management API.
|
|
|
|
The Management API provides read-only access to configuration data for
|
|
Google Analytics and supercedes the Data Export API Account Feed.
|
|
The Management API supports 5 feeds: account, web property, profile,
|
|
goal, advanced segment.
|
|
|
|
You can access each feed through the respective management query class
|
|
below. All requests return the same data object.
|
|
|
|
Args:
|
|
feed_uri: str or AccountQuery, WebPropertyQuery,
|
|
ProfileQuery, GoalQuery, MgmtAdvSegFeedQuery
|
|
The Management API Feed uri to define which feed to retrieve.
|
|
Either use a string or one of the wrapper classes.
|
|
"""
|
|
|
|
return self.get_feed(feed_uri,
|
|
desired_class=gdata.analytics.data.ManagementFeed,
|
|
auth_token=auth_token,
|
|
**kwargs)
|
|
|
|
GetMgmtFeed = GetManagementFeed = get_management_feed
|
|
|
|
|
|
class AnalyticsBaseQuery(gdata.client.GDQuery):
|
|
"""Abstracts common configuration across all query objects.
|
|
|
|
Attributes:
|
|
scheme: string The default scheme. Should always be https.
|
|
host: string The default host.
|
|
"""
|
|
|
|
scheme = 'https'
|
|
host = 'www.google.com'
|
|
|
|
|
|
class AccountFeedQuery(AnalyticsBaseQuery):
|
|
"""Account Feed query class to simplify constructing Account Feed Urls.
|
|
|
|
To use this class, you can either pass a dict in the constructor that has
|
|
all the data feed query parameters as keys:
|
|
queryUrl = AccountFeedQuery({'max-results': '10000'})
|
|
|
|
Alternatively you can add new parameters directly to the query object:
|
|
queryUrl = AccountFeedQuery()
|
|
queryUrl.query['max-results'] = '10000'
|
|
|
|
Args:
|
|
query: dict (optional) Contains all the GA Data Feed query parameters
|
|
as keys.
|
|
"""
|
|
|
|
path = '/analytics/feeds/accounts/default'
|
|
|
|
def __init__(self, query={}, **kwargs):
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
|
|
class DataFeedQuery(AnalyticsBaseQuery):
|
|
"""Data Feed query class to simplify constructing Data Feed Urls.
|
|
|
|
To use this class, you can either pass a dict in the constructor that has
|
|
all the data feed query parameters as keys:
|
|
queryUrl = DataFeedQuery({'start-date': '2008-10-01'})
|
|
|
|
Alternatively you can add new parameters directly to the query object:
|
|
queryUrl = DataFeedQuery()
|
|
queryUrl.query['start-date'] = '2008-10-01'
|
|
|
|
Args:
|
|
query: dict (optional) Contains all the GA Data Feed query parameters
|
|
as keys.
|
|
"""
|
|
|
|
path = '/analytics/feeds/data'
|
|
|
|
def __init__(self, query={}, **kwargs):
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
|
|
class AccountQuery(AnalyticsBaseQuery):
|
|
"""Management API Account Feed query class.
|
|
|
|
Example Usage:
|
|
queryUrl = AccountQuery()
|
|
queryUrl = AccountQuery({'max-results': 100})
|
|
|
|
queryUrl2 = AccountQuery()
|
|
queryUrl2.query['max-results'] = 100
|
|
|
|
Args:
|
|
query: dict (optional) A dictionary of query parameters.
|
|
"""
|
|
|
|
path = '/analytics/feeds/datasources/ga/accounts'
|
|
|
|
def __init__(self, query={}, **kwargs):
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
class WebPropertyQuery(AnalyticsBaseQuery):
|
|
"""Management API Web Property Feed query class.
|
|
|
|
Example Usage:
|
|
queryUrl = WebPropertyQuery()
|
|
queryUrl = WebPropertyQuery('123', {'max-results': 100})
|
|
queryUrl = WebPropertyQuery(acct_id='123',
|
|
query={'max-results': 100})
|
|
|
|
queryUrl2 = WebPropertyQuery()
|
|
queryUrl2.acct_id = '1234'
|
|
queryUrl2.query['max-results'] = 100
|
|
|
|
Args:
|
|
acct_id: string (optional) The account ID to filter results.
|
|
Default is ~all.
|
|
query: dict (optional) A dictionary of query parameters.
|
|
"""
|
|
|
|
def __init__(self, acct_id='~all', query={}, **kwargs):
|
|
self.acct_id = acct_id
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
@property
|
|
def path(self):
|
|
"""Wrapper for path attribute."""
|
|
return ('/analytics/feeds/datasources/ga/accounts/%s/webproperties' %
|
|
self.acct_id)
|
|
|
|
|
|
class ProfileQuery(AnalyticsBaseQuery):
|
|
"""Management API Profile Feed query class.
|
|
|
|
Example Usage:
|
|
queryUrl = ProfileQuery()
|
|
queryUrl = ProfileQuery('123', 'UA-123-1', {'max-results': 100})
|
|
queryUrl = ProfileQuery(acct_id='123',
|
|
web_prop_id='UA-123-1',
|
|
query={'max-results': 100})
|
|
|
|
queryUrl2 = ProfileQuery()
|
|
queryUrl2.acct_id = '123'
|
|
queryUrl2.web_prop_id = 'UA-123-1'
|
|
queryUrl2.query['max-results'] = 100
|
|
|
|
Args:
|
|
acct_id: string (optional) The account ID to filter results.
|
|
Default is ~all.
|
|
web_prop_id: string (optional) The web property ID to filter results.
|
|
Default is ~all.
|
|
query: dict (optional) A dictionary of query parameters.
|
|
"""
|
|
|
|
def __init__(self, acct_id='~all', web_prop_id='~all', query={}, **kwargs):
|
|
self.acct_id = acct_id
|
|
self.web_prop_id = web_prop_id
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
@property
|
|
def path(self):
|
|
"""Wrapper for path attribute."""
|
|
return ('/analytics/feeds/datasources/ga/accounts/%s/webproperties'
|
|
'/%s/profiles' % (self.acct_id, self.web_prop_id))
|
|
|
|
|
|
class GoalQuery(AnalyticsBaseQuery):
|
|
"""Management API Goal Feed query class.
|
|
|
|
Example Usage:
|
|
queryUrl = GoalQuery()
|
|
queryUrl = GoalQuery('123', 'UA-123-1', '555',
|
|
{'max-results': 100})
|
|
queryUrl = GoalQuery(acct_id='123',
|
|
web_prop_id='UA-123-1',
|
|
profile_id='555',
|
|
query={'max-results': 100})
|
|
|
|
queryUrl2 = GoalQuery()
|
|
queryUrl2.acct_id = '123'
|
|
queryUrl2.web_prop_id = 'UA-123-1'
|
|
queryUrl2.query['max-results'] = 100
|
|
|
|
Args:
|
|
acct_id: string (optional) The account ID to filter results.
|
|
Default is ~all.
|
|
web_prop_id: string (optional) The web property ID to filter results.
|
|
Default is ~all.
|
|
profile_id: string (optional) The profile ID to filter results.
|
|
Default is ~all.
|
|
query: dict (optional) A dictionary of query parameters.
|
|
"""
|
|
|
|
def __init__(self, acct_id='~all', web_prop_id='~all', profile_id='~all',
|
|
query={}, **kwargs):
|
|
self.acct_id = acct_id
|
|
self.web_prop_id = web_prop_id
|
|
self.profile_id = profile_id
|
|
self.query = query or {}
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|
|
@property
|
|
def path(self):
|
|
"""Wrapper for path attribute."""
|
|
return ('/analytics/feeds/datasources/ga/accounts/%s/webproperties'
|
|
'/%s/profiles/%s/goals' % (self.acct_id, self.web_prop_id,
|
|
self.profile_id))
|
|
|
|
|
|
class AdvSegQuery(AnalyticsBaseQuery):
|
|
"""Management API Goal Feed query class.
|
|
|
|
Example Usage:
|
|
queryUrl = AdvSegQuery()
|
|
queryUrl = AdvSegQuery({'max-results': 100})
|
|
|
|
queryUrl1 = AdvSegQuery()
|
|
queryUrl1.query['max-results'] = 100
|
|
|
|
Args:
|
|
query: dict (optional) A dictionary of query parameters.
|
|
"""
|
|
|
|
path = '/analytics/feeds/datasources/ga/segments'
|
|
|
|
def __init__(self, query={}, **kwargs):
|
|
self.query = query
|
|
gdata.client.GDQuery(self, **kwargs)
|
|
|