This tutorial walks through the steps required to access a Google Analytics account, query the Analytics APIs, handle the API responses, and output the results. The Core Reporting API v3.0, Management API v3.0, and OAuth2.0 are used in this tutorial.
Step 1: Enable the Analytics API
To get started using Google Analytics API, you need to first use the setup tool, which guides you through creating a project in the Google API Console, enabling the API, and creating credentials.
Create a client ID
From the Credentials page:
- Click Create Credentials and select OAuth client ID.
- Select Other for APPLICATION TYPE.
- Name the credential.
- Click Create.
Select the credential you just created and
click Download JSON. Save the downloaded file as
client_secrets.json
; you need it later in the tutorial.
Step 2: Install the Google Client Library
You can either use a package manager or download and install the Python client library manually:
pip
Use pip, the recommended tool for installing Python packages:
sudo pip install --upgrade google-api-python-client
Setuptools
Use the easy_install tool included in the setuptools package:
sudo easy_install --upgrade google-api-python-client
Manual installation
Download the latest client library for python, unpack the code and run:
sudo python setup.py install
You may need to invoke the command with superuser (sudo
)
privileges to install to the system Python.
Step 3: Setup the sample
You'll need to create a single file named HelloAnalytics.py
,
which will contain the given sample code.
- Copy or
download the following source code to
HelloAnalytics.py
. - Move the previously downloaded
client_secrets.json
within the same directory as the sample code.
"""A simple example of how to access the Google Analytics API.""" import argparse from apiclient.discovery import build import httplib2 from oauth2client import client from oauth2client import file from oauth2client import tools def get_service(api_name, api_version, scope, client_secrets_path): """Get a service that communicates to a Google API. Args: api_name: string The name of the api to connect to. api_version: string The api version to connect to. scope: A list of strings representing the auth scopes to authorize for the connection. client_secrets_path: string A path to a valid client secrets file. Returns: A service that is connected to the specified API. """ # Parse command-line arguments. parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) flags = parser.parse_args([]) # Set up a Flow object to be used if we need to authenticate. flow = client.flow_from_clientsecrets( client_secrets_path, scope=scope, message=tools.message_if_missing(client_secrets_path)) # Prepare credentials, and authorize HTTP object with them. # If the credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # credentials will get written back to a file. storage = file.Storage(api_name + '.dat') credentials = storage.get() if credentials is None or credentials.invalid: credentials = tools.run_flow(flow, storage, flags) http = credentials.authorize(http=httplib2.Http()) # Build the service object. service = build(api_name, api_version, http=http) return service def get_first_profile_id(service): # Use the Analytics service object to get the first profile id. # Get a list of all Google Analytics accounts for the authorized user. accounts = service.management().accounts().list().execute() if accounts.get('items'): # Get the first Google Analytics account. account = accounts.get('items')[0].get('id') # Get a list of all the properties for the first account. properties = service.management().webproperties().list( accountId=account).execute() if properties.get('items'): # Get the first property id. property = properties.get('items')[0].get('id') # Get a list of all views (profiles) for the first property. profiles = service.management().profiles().list( accountId=account, webPropertyId=property).execute() if profiles.get('items'): # return the first view (profile) id. return profiles.get('items')[0].get('id') return None def get_results(service, profile_id): # Use the Analytics Service Object to query the Core Reporting API # for the number of sessions in the past seven days. return service.data().ga().get( ids='ga:' + profile_id, start_date='7daysAgo', end_date='today', metrics='ga:sessions').execute() def print_results(results): # Print data nicely for the user. if results: print 'View (Profile): %s' % results.get('profileInfo').get('profileName') print 'Total Sessions: %s' % results.get('rows')[0][0] else: print 'No results found' def main(): # Define the auth scopes to request. scope = ['https://www.googleapis.com/auth/analytics.readonly'] # Authenticate and construct service. service = get_service('analytics', 'v3', scope, 'client_secrets.json') profile = get_first_profile_id(service) print_results(get_results(service, profile)) if __name__ == '__main__': main()
Step 4: Run the sample
After you have enabled the Analytics API, installed the Google APIs client library for Python, and set up the sample source code the sample is ready to run.
Run the sample using:
python HelloAnalytics.py
- The application will load the authorization page in a browser.
- If you are not already logged into your Google account, you will be prompted to log in. If you are logged into multiple Google accounts, you will be asked to select one account to use for the authorization.
When you finish these steps, the sample outputs the name of the authorized user's first Google Analytics view (profile) and the number of sessions for the last seven days.
With the authorized Analytics service object you can now run any of code samples found in the Management API reference docs. For example you could try changing the code to use the accountSummaries.list method.
Troubleshooting
AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urlparse'
This error can occur in Mac OSX where the default installation of the "six"
module (a dependency of this library) is loaded before the one that pip
installed. To fix the issue, add pip's install location to the PYTHONPATH
system environment variable:
-
Determine pip's install location with the following command:
pip show six | grep "Location:" | cut -d " " -f2
-
Add the following line to your
~/.bashrc
file, replacing<pip_install_path>
with the value determined above:export PYTHONPATH=$PYTHONPATH:<pip_install_path>
-
Reload your
~/.bashrc
file in any open terminal windows using the following command:source ~/.bashrc