import httplib2 |
import httplib2 |
from apiclient.discovery import build |
from apiclient.discovery import build |
from oauth2client.client import flow_from_clientsecrets |
from oauth2client.client import flow_from_clientsecrets |
from oauth2client.file import Storage |
from oauth2client.file import Storage |
from oauth2client.tools import run |
from oauth2client.tools import run |
|
|
from pylons import config |
from pylons import config |
|
|
|
|
def _prepare_credentials( token_filename, credentials_filename ): |
def _prepare_credentials( token_filename, credentials_filename ): |
|
""" |
|
Either returns the user's oauth credentials or uses the credentials |
|
file to generate a token (by forcing the user to login in the browser) |
|
""" |
storage = Storage( token_filename ) |
storage = Storage( token_filename ) |
credentials = storage.get() |
credentials = storage.get() |
|
|
if credentials is None or credentials.invalid: |
if credentials is None or credentials.invalid: |
flow = flow_from_clientsecrets(credentials_filename, |
flow = flow_from_clientsecrets(credentials_filename, |
scope='https://www.googleapis.com/auth/analytics.readonly', |
scope='https://www.googleapis.com/auth/analytics.readonly', |
message="Can't find the credentials file") |
message="Can't find the credentials file") |
credentials = run(flow, storage) |
credentials = run(flow, storage) |
|
|
return credentials |
return credentials |
|
|
def initialize_service( token_file, credentials_file ): |
def init_service( token_file, credentials_file ): |
|
""" |
|
Given a file containing the user's oauth token (and another with |
|
credentials in case we need to generate the token) will return a |
|
service object representing the analytics API. |
|
""" |
http = httplib2.Http() |
http = httplib2.Http() |
|
|
credentials = _prepare_credentials(token_file, credentials_file) |
credentials = _prepare_credentials(token_file, credentials_file) |
http = credentials.authorize(http) # authorize the http object |
http = credentials.authorize(http) # authorize the http object |
|
|
return build('analytics', 'v3', http=http) |
return build('analytics', 'v3', http=http) |
|
|
|
|
def get_profile_id(service): |
def get_profile_id(service): |
# Get a list of all Google Analytics accounts for this user |
""" |
|
Get the profile ID for this user and the service specified by the |
|
'googleanalytics.id' configuration option. |
|
""" |
accounts = service.management().accounts().list().execute() |
accounts = service.management().accounts().list().execute() |
|
|
if accounts.get('items'): |
if not accounts.get('items'): |
firstAccountId = accounts.get('items')[0].get('id') |
return None |
webPropertyId = config.get('googleanalytics.id') |
|
profiles = service.management().profiles().list( |
|
accountId=firstAccountId, |
|
webPropertyId=webPropertyId).execute() |
|
|
|
if profiles.get('items'): |
accountId = accounts.get('items')[0].get('id') |
# return the first Profile ID |
webPropertyId = config.get('googleanalytics.id') |
return profiles.get('items')[0].get('id') |
profiles = service.management().profiles().list( |
|
accountId=accountId, webPropertyId=webPropertyId).execute() |
|
|
|
if profiles.get('items'): |
|
return profiles.get('items')[0].get('id') |
|
|
return None |
return None |