Google アナリティクス Reporting API v4を使用してデータ取得する

こんにちは、香田です。

データパイプラインツール等を利用してGoogle アナリティクスからデータ取得する際、取得できる項目や値を事前に検証したい時あるんではないでしょうか?

Google アナリティクス Reporting API v4

今回紹介するGoogle アナリティクス Reporting API v4 を利用すると柔軟にデータが取得できます。

以降では事前に必要な認証設定の手順やサンプルコードを実行しCSV形式でデータ取得例を紹介していきます。

プロジェクト作成とAPI有効化

はじめにGoogle API コンソールへアクセスし、プロジェクトを作成します。

[プロジェクト名]を入力し[作成]をクリックします。

2-1

作成したプロジェクトを選択し、[APIとサービスを有効化]をクリックします。

2-2

検索ボックスに[Analytics Reporting API]を入力し[Google Analytics Reporting API]をクリックします。

2-3

[有効にする]をクリックします。

2-4

Google アナリティクス 認証設定

[認証情報]を選択し[認証情報を作成]より[サービスアカウント]をクリックします。

2-5

[サービスアカウント名]を入力し[作成]をクリックします。

2-6

[続行]をクリックします。

2-7

[キーを作成]より[キーのタイプ]は[JSON]で[作成]をクリックします。

ファイルをダウンロードし、[完了]をクリックします。

2-8

Google アナリティクスのアカウントに、作成したサービスアカウントのメールアドレスを追加するためコピーします。

2-9

Google アナリティクス ユーザー設定

Google アナリティクスの[管理]より[アカウント ユーザーの管理]をクリックします。

2-10

[ユーザーを追加]をクリックします。

2-11

サービスアカウントのメールアドレスを入力します。サービスアカウントのメールアドレスには配信できないため、[新規ユーザーにメールで通知する]のチェックを外し、権限は[表示と分析]のみにして[追加]をクリックします。

2-12

Python パッケージ インストール

ここでは、Google アナリティクス Reporting API v4へアクセスするために、サービスアカウントを利用したサンプルコードの実行例を紹介します。

GCPで無料で提供されているブラウザでコマンドラインやエディタを利用可能なCloud Shellを利用していきます。

Cloud Shellのコードエディタを起動します。

ターミナルでPython パッケージをインストールします。

mkdir analytics
cd analytics
python3 -m venv venv
source venv/bin/activate
pip install google-api-python-client

サンプルコードのセットアップ

analyticsフォルダ配下にサービスアカウントで作成したJSONキーをアップロードします。

[File]の[Upload Files]よりJSONキーを選択します。

2-14

analyticsフォルダ配下で[New FIle]よりmain.pyという名前で新規ファイルを作成し、下記のサンプルコードをはりつけます。

2-15

サンプルコード

import os
import csv

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = os.environ['KEY_FILE_LOCATION']
VIEW_ID = os.environ['VIEW_ID']


def main():
    # 認証設定
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        KEY_FILE_LOCATION, SCOPES)
    analytics = build('analyticsreporting', 'v4', credentials=credentials)

    # レポートデータ取得
    response = analytics.reports().batchGet(
        body={
            'reportRequests': [
                {
                    'viewId': VIEW_ID,
                    'dateRanges': [
                        {"startDate": "14daysAgo", "endDate": "today"},
                    ],
                    'metrics': [
                        {'expression': 'ga:hits'}
                    ],
                    'dimensions': [

                        {'name': 'ga:date'},
                        {'name': 'ga:pagepath'}
                    ]
                }]
        }
    ).execute()

    # CSVファイルが存在してる場合削除
    output_csv = 'output.csv'
    if os.path.exists(output_csv):
        os.remove(output_csv)

    # CSVファイルに書き込み
    for report in response.get('reports', []):
        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaderEntries = columnHeader.get(
            'metricHeader', {}).get('metricHeaderEntries', [])
        metricHeaders = [i.get('name') for i in metricHeaderEntries]

        columns = []
        # dimension ヘッダー追加
        columns.extend(dimensionHeaders)
        # metric ヘッダー追加
        columns.extend(metricHeaders)

        with open(output_csv, 'a') as f:
            writer = csv.writer(f)
            writer.writerow(columns)
            for row in report.get('data', {}).get('rows', []):
                dimensions = row.get('dimensions', [])
                dateRangeValues = row.get('metrics', [])
                for metrics_values in dateRangeValues:
                    data = []
                    # dimension data 追加
                    dv = [d for d in dimensions]
                    data.extend(dv)
                    # metric data 追加
                    mv = [v for v in metrics_values.get('values')]
                    data.extend(mv)
                    # data 書き込み
                    writer.writerow(data)


if __name__ == '__main__':
    main()

下記箇所を適宜修正するとカスタマイズ可能です。

body={
    'reportRequests': [
        {
            'viewId': VIEW_ID,
            'dateRanges': [
                {"startDate": "7daysAgo", "endDate": "today"},
            ],
            'metrics': [
                {'expression': 'ga:sessions'},
                {'expression': 'ga:users'},
                {'expression': 'ga:hits'}
            ],
            'dimensions': [

                {'name': 'ga:date'},
                {'name': 'ga:pagepath'}
            ]
        }]
}

サンプルコードの実行

環境変数としてサービスアカウント JSONキーのファイルパスとGoogle アナリティクス ビューIDを設定します。

export VIEW_ID=<Google アナリティクス ビューID>
export KEY_FILE_LOCATION="./<サービスアカウント JSONキーファイル名>"

ターミナルでサンプルコードを実行します。

python3 main.py

実行結果の確認

実行すると下記のようなCSVファイルが確認できるはずです。

2-16

さいごに

Google アナリティクス Reporting API v4でデータ取得いかがでしたでしょうか?

Google アナリティクスで取得できるディメンションと指標はこちらでで確認できるので、よかったらサンプルコードをカスタマイズして確認してみてください。

最後までご覧頂きありがとうございます!

SNSでもご購読できます。