PythonからGoogle Analytics Reporting APIを使う

PythonからGoogle Analytics Reporing APIを使ってGoogleアナリティクスのからデータを取得してみましょう。実行するコードはGoogleが提供しているサンプルコードを利用します。
PythonなのでMacでもWindowsでもLinuxでもインストールを行えば使うことができインストールさえしてしまえば特別な環境構築は必要ないのですぐに動作確認することが可能です。今回はWindows10を使って動作確認を行います。
PythonがWindows 10 PCにインストール済みの状態から進めます。
目次
Googleでの設定
Pythonに限らずnode.jsやPHPなど別の言語を使ってAPIを利用する場合にもこのGoogleでの設定は必要なのでPythonに限らず他の言語を利用する場合も活用することができます。さまざまページで設定方法が記述されていますが、Googleのページが日々更新されているので大半の情報が古いままです。2019年10月に近ければ本手順は参考になるかと思います。
APIからの接続を行う前に大きく分けて以下の3つの作業を行う必要があります。
- サービスアカウントを作成して接続に必要な秘密鍵を取得
- Google Analyticsのビューにユーザを追加、ビューIDの取得
- Google Analytics Reporting APIの有効化
サービスアカウントの設定
Google Analyticsのレポートページにアクセスします。左側のReporting API V4のデータを取得するをクリックします。

Reporting API v4についての説明が記述されているのでページの一番下に移動して、サービスアプリケーションからPythonをクリックします。

Pythonクイックスタートのページに移動するので、認証情報を作成するの1.サービスカウントページのリンクをクリックしてください。

サービスアカウントのページに移動しますが、サービスアカウント作成の前にプロジェクトを作成する必要があります。右にある作成ボタンをクリックしてください。

プロジェクトの作成画面が表示されます。自動で名前がつけられているのでそのまま利用します。任意の名前を付けてください。名前を入力したら、作成ボタンをクリックしてください。

プロジェクトの作成が完了すると以下の画面が表示されるので、上部のサービスアカウントの作成をクリックしてください。

サービスアカウント名の入力画面が表示されるので、任意のサービスアカウント名を入力してください。ここではtest用なのでtestにしています。testを入力すると自動でサービスアカウントIDが入力されるので、そのままIDにします。入力が終わったら作成ボタンをクリックしてください。

権限の設定をきかれるので、役割のプルダウンメニューからプロジェクトの閲覧者を選択します。選択したら、続行ボタンをクリックします。

ユーザにこのサービスアカウントへのアクセス権を付与の箇所は何もいれないでその下のキーの作成をクリックします。

キーのタイプの選択画面が表示されるので、JSONのまま作成ボタンをクリックします。

秘密鍵がパソコンに保存されましたというメッセージが表示され、jsonファイルが保存されます。


アカウントとキーの作成は完了です。PythonでAPIを使用する際に保存したjsonファイルが必要となります。
次のGoogle Analyticsのビューにユーザを追加する際に追加したアカウントのメールが必要になります。

Google Analyticsのビューにユーザを追加とビューIDの取得
Google Analyticsのビューに作成したサービスアカウントのユーザを追加するためにGoogle Analyticsにログインして管理画面を表示します。
右側のビューの下にあるユーザ管理をクリックしてください。

下記の画面が表示されるおんで、右上にある+ボタンをクリックしてユーザを追加を選択してください。

サービスアカウント作成時に表示されていたメールアドレスを入力してください。権限は表示と分析にチェックを付けます。

追加したユーザが下記のように表示されていればユーザの追加は完了です。

ビューのIDがAPI接続する際に必要になるので、下記の黒塗りにしてあるIDを控えておいてください。

Google Analytics Reporting APIの有効化
Google Analytics Reporting APIを有効化するためにGoogle Platformライブラリに移動します。
検索窓にGoogle Analytics Reportingと入力してください。

検索結果が表示されるので、Google Analytics Reporting APIをクリックしてください。

有効になっていない場合は有効にするボタンが表示されるのでクリックしてください。もし有効になっている場合は、APIが有効ですと表示されます。

これでAPIを利用するためのGoogle側の設定は完了です。
Pythonの設定
ライブラリのインストール
Pythonを使ってAPI接続するためにライブラリをインストールする必要があります。ライブラリのインストールにはpipコマンドを利用します。
pip install --upgrade google-api-python-client
サンプルコードを実行した場合に下記のエラーが表示される場合はoauth2clientライブラリもインストールする必要があります。
from oauth2client.service_account import ServiceAccountCredentials
ModuleNotFoundError: No module named ‘oauth2client’
pip install --upgrade oauth2client
サンプルコードの利用
Python クイックスタートのページの下部にPythonのサンプルコードが記述されています。そのサンプルコードをそのまま利用します。ファイル名は、ドキュメントと同じHelloAnalytics.pyにします。
実行前にサンプルコードに以下の3点変更が必要です。
- REPLACE_WITH_JSON_FILEと記述されている場所に秘密鍵を作成した際に保存したjsonファイルを指定してください。
- REPLACE_WITH_VIEW_IDはGoogle Analyticsの管理画面で確認したっビューIDを入力します。
- printをprint()に変更する。Python3ではprintには()カッコが必要なのでもしエラーが表示された場合は()をつけてください。3か所変更箇所があります。
"""Hello Analytics Reporting API V4."""
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = '<REPLACE_WITH_JSON_FILE>'
VIEW_ID = '<REPLACE_WITH_VIEW_ID>'
def initialize_analyticsreporting():
"""Initializes an Analytics Reporting API V4 service object.
Returns:
An authorized Analytics Reporting API V4 service object.
"""
credentials = ServiceAccountCredentials.from_json_keyfile_name(
KEY_FILE_LOCATION, SCOPES)
# Build the service object.
analytics = build('analyticsreporting', 'v4', credentials=credentials)
return analytics
def get_report(analytics):
"""Queries the Analytics Reporting API V4.
Args:
analytics: An authorized Analytics Reporting API V4 service object.
Returns:
The Analytics Reporting API V4 response.
"""
return analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': VIEW_ID,
'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
'metrics': [{'expression': 'ga:sessions'}],
'dimensions': [{'name': 'ga:country'}]
}]
}
).execute()
def print_response(response):
"""Parses and prints the Analytics Reporting API V4 response.
Args:
response: An Analytics Reporting API V4 response.
"""
for report in response.get('reports', []):
columnHeader = report.get('columnHeader', {})
dimensionHeaders = columnHeader.get('dimensions', [])
metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
for row in report.get('data', {}).get('rows', []):
dimensions = row.get('dimensions', [])
dateRangeValues = row.get('metrics', [])
for header, dimension in zip(dimensionHeaders, dimensions):
print header + ': ' + dimension
for i, values in enumerate(dateRangeValues):
print 'Date range: ' + str(i)
for metricHeader, value in zip(metricHeaders, values.get('values')):
print metricHeader.get('name') + ': ' + value
def main():
analytics = initialize_analyticsreporting()
response = get_report(analytics)
print_response(response)
if __name__ == '__main__':
main()
サンプルコードの時刻
作成したHelloAnalytics.pyをpythonコマンドで実行します。
実行すると1週間分の国別のセッション数が表示されます。Australiaからは3セッション、Bangladeshからは1セッションがあったことがわかります。
>python HelloAnalytics.py
ga:country: (not set)
Date range: 0
ga:sessions: 2
ga:country: Australia
Date range: 0
ga:sessions: 3
ga:country: Bangladesh
Date range: 0
ga:sessions: 1
・
・
・