On platforms such as teachsomebody.com where authors can post courses and articles, there is the need to show how their
posts are faring in terms of number of page views, number of sessions, etc. Users who register to become authors or publishers on teachsomebody will have access to their own analytics dashboard where they see metrics on only the courses and articles they have published on the platform. In this post, I will explain how we retrieve number of page views per author from Google Analytics via a platform-wide service account. To allow an application to retrieve data from Google Analytics Management API (and many other Google APIs), these steps are in order:
In the subsequent sections, I will show how you can make request to the Google
Analytics API using the Google API client Python library: google-api-python-client.
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
credentials = service_account.Credentials.from_service_account_file('', scopes=SCOPES)
analytics = build('analyticsreporting', 'v4', credentials=credentials)
resp = analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': '',
'dateRanges': [
{'startDate': '30daysAgo', 'endDate': 'today'}
],
'metrics': [
{'expression': 'ga:sessions'},
{'expression': 'ga:avgSessionDuration'},
{'expression': 'ga:pageviews'}
],
'dimensions': [
{'name': 'ga:country'},
{'name': 'ga:pagePath'}
],
'dimensionFilterClauses': [
{
'filters': [
{
'dimensionName': 'ga:pagePath',
'operator': ,
'expressions':
}
]
}
]
}
]
},
quotaUser=<user_id>
}
)
The viewId is a unique identification of a property view in Google Analytics. To know how to see your view ID see: https://keyword-hero.com/documentation/finding-your-view-id-in-google-analytics
The dimensionFilterClauses allow to retrieve metrics relating to a specify partial or an exact page urls (filter_expressions). See the possible operators at: https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#operator
The quotaUser is used to get the quota per user so as to extend the overall API query quota limits.
Sample output for the metrics of a specified page is as shown below:
{
"reports": [
{
"columnHeader": {
"dimensions": [
"ga:country",
"ga:pagePath"
],
"metricHeader": {
"metricHeaderEntries": [
{
"name": "ga:sessions",
"type": "INTEGER"
},
{
"name": "ga:avgSessionDuration",
"type": "TIME"
},
{
"name": "ga:pageviews",
"type": "INTEGER"
}
]
}
},
"data": {
"totals": [
{
"values": [
"0",
"0.0",
"150"
]
}
]
}
}
]
}
The values in the totals represent the metrics in the specified order.
Created by
Evans is a Computer Engineer and cloud technology enthusiast. He has a Masters degree in Embedded Systems (focusing on Software design) from the Technical University of Eindhoven (The Netherlands) and a Bachelor of Science in Electronic and Computer Engineering from the Polytechnic University of Turin (Italy). In addition, he has worked for the high-tech industry in the the Netherlands and other large corporations for over seven years.