|
import os |
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 |
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) |
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 init_service(token_file, credentials_file): |
def init_service(token_file, credentials_file): |
""" |
""" |
Given a file containing the user's oauth token (and another with |
Given a file containing the user's oauth token (and another with |
credentials in case we need to generate the token) will return a |
credentials in case we need to generate the token) will return a |
service object representing the analytics API. |
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 the profile ID for this user and the service specified by the |
Get the profile ID for this user and the service specified by the |
'googleanalytics.id' configuration option. |
'googleanalytics.id' configuration option. This function iterates |
|
over all of the accounts available to the user who invoked the |
|
service to find one where the account name matches (in case the |
|
user has several). |
""" |
""" |
accounts = service.management().accounts().list().execute() |
accounts = service.management().accounts().list().execute() |
|
|
if not accounts.get('items'): |
if not accounts.get('items'): |
return None |
return None |
|
|
accountId = accounts.get('items')[0].get('id') |
accountName = config.get('googleanalytics.account') |
webPropertyId = config.get('googleanalytics.id') |
webPropertyId = config.get('googleanalytics.id') |
|
for acc in accounts.get('items'): |
|
if acc.get('name') == accountName: |
|
accountId = acc.get('id') |
|
|
|
webproperties = service.management().webproperties().list(accountId=accountId).execute() |
|
|
profiles = service.management().profiles().list( |
profiles = service.management().profiles().list( |
accountId=accountId, webPropertyId=webPropertyId).execute() |
accountId=accountId, webPropertyId=webPropertyId).execute() |
|
|
if profiles.get('items'): |
if profiles.get('items'): |
return profiles.get('items')[0].get('id') |
return profiles.get('items')[0].get('id') |
|
|
return None |
return None |
|
|