Google Analytics Data API経由でデータを取得する

· ·

概要 🔗

Google Analytics4のデータをDataAPIをで取得する。Segmentは2022年4月の段階ではまだ実装されていなそうだ。

準備 🔗

  1. API有効化

APIs & Services > Google Analytics Data APIを有効化

  1. Service Account発行
  • IAM & Admin > Service Accountsでサービスアカウントを発行する
  • Service Accountsページで作成したメールアドレスを選択し、Keyからキーの追加を行いjsonファイルをダウンロードする
  1. 実際のソースサンプル

実際書いたコードじゃないので少し適当な印象が否めませんが、service accountのjsonファイルを食わせつつデータを取得する場合は、こんな感じになります。

segmentの実装が待たれる。segmentが無いと、APIが存在するとも言えないし、全く分析用途としても使い物にならない…

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import csv, argparse
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import DateRange, Dimension, Filter, FilterExpression, Metric, RunReportRequest, OrderBy

parser = argparse.ArgumentParser()
parser.add_argument('-o', '--output', help='output file name')
args = parser.parse_args()

KEYFILE = '../client_secret.json'
OUTFILE = args.output

def sample_run_report(property_id="YOUR-GA4-PROPERTY-ID"):
    client = BetaAnalyticsDataClient().from_service_account_json(KEYFILE)

    request = RunReportRequest(
        property=f"properties/{property_id}",
        dimensions=[Dimension(name="date")],
        dimension_filter = FilterExpression(filter=Filter(field_name="date", string_filter=Filter.StringFilter(match_type="EXACT", value="2022-04-01"))), 
        metrics=[Metric(name="eventCount")],
        date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],
        order_bys=[OrderBy(dimension=OrderBy.DimensionOrderBy(dimension_name="date"))]
    )
    response = client.run_report(request)

    data=[]
    for row in response.rows:
        raw=[]
        for dimension in row.dimension_values:
            raw.append(dimension.value)
        for metric in row.metric_values:
            raw.append(metric.value)
        data.append(raw)

    with open(OUTFILE, 'w') as f:
        write = csv.writer(f)
        write.writerows(data)


if __name__ == '__main__':
    sample_run_report()

参考 🔗

comments powered by Disqus