Closed6

Google Analytics のデータを API で取得する

fujimotoshinjifujimotoshinji

Google Analytics のイベントデータをアプリケーションで活用したく取り込み方法を軽く調査しました。
ざっと調べた感じ以下の取り込み方法がありそうでした。

  • BigQuery とリンクして、BigQuery から取り出す
  • Google Analytics Reporting API v4 による取り出し
  • Google Analytics Data API による取り出し

一番柔軟なのは BigQuery から取り出すことだと思うのですが、今回のアプリケーションは Google Cloud を利用していないということもあり BigQuery 利用は最終案。
Reporting API は UA、Data API は GA4 という情報を見た(真偽は定かではない)ので今回はまずは Data API を試してみます。

fujimotoshinjifujimotoshinji

Google Analytics Data API

https://developers.google.com/analytics/devguides/reporting/data/v1?hl=ja

Google Analytics 4(GA4)のレポートデータにプログラムでアクセスできる。

正式リリースされていない

まだベータ版という位置づけらしい。
本格利用時までに正式リリースされるといいんだけど。。

ユースケース

  • Google アナリティクスのデータを表示するカスタマイズされたマイレポートを作成する。
  • 複雑なレポートタスクを自動化して時間を節約する。
  • Google アナリティクスのデータを他のビジネス アプリケーションと統合する。

今回はサイト内検索キーワードの取得が目的で、取得可能なデータ種類によってできそう。

利用するメソッド

今回は 1種類のデータのみ、複雑なことはしないので runReport を利用すればよさそう。

fujimotoshinjifujimotoshinji

CLI による API クイックスタート

今回はまずはデータ取得できるかだけ試したかったので CLI によるクイックスタートを試してみる。
このページ以降、未翻訳だからか日本語だと表示できないページがあるので表示できないページは言語を英語に設定した方がいい。

https://developers.google.com/analytics/devguides/reporting/data/v1/quickstart-cli?hl=en

流れ

  1. API の有効化
  2. gcloud コマンドのインストール
  3. API リクエスト

1. API の有効化

Google Analytics Data API をリクエストするには Google Cloud のプロジェクトと、認証情報が必要になる。
ドキュメントの「Enable the Google Analytics Data API v1」をクリックすることで Google Cloud のコンソールを操作せずに設定できる。

プロジェクト名を入力

利用方法に Desktop App を選択

認証情報の出力

「DOWNLOAD CLIENT CONFIGURATION」から認証情報を保存する

2. gcloud コマンドのインストール

リンク から各 OS ごとのインストール方法が案内されている。
私は野良なコマンドラインインストールが嫌なので asdf でインストールした。Homebrew には配布がなかった。

3. API リクエスト

まずは作成したクライアントに対してログインする。
gcloud、credentials.json は自分の環境のパスで指定する。

gcloud auth application-default login \
    --scopes=https://www.googleapis.com/auth/analytics.readonly \
    --client-id-file=./credentials.json

コマンド結果に https://accounts.google.com/o/oauth2/auth から始まる URL が表示されるのでブラウザからアクセスする。

Google アカウント選択画面 -> 警告画面(アプリ) -> アクセス許可 と遷移する。
ブラウザ操作を終えると $HOME/.config/gcloud に gcloud の設定ファイルが作成される。

GA4 のプロパティ ID を GA の画面から取得する。基本的に数字 10桁?

以下のレポート API は6/1 - 15 の日付範囲の国別のアクティブユーザー数を取得するリクエスト。

export GA4_PROPERTY_ID=123456XXXX

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://analyticsdata.googleapis.com/v1beta/properties/$GA4_PROPERTY_ID:runReport" -d'{
    "dateRanges": [{ "startDate": "2023-06-01", "endDate": "2023-06-15" }],
    "dimensions": [{ "name": "country" }],
    "metrics": [{ "name": "activeUsers" }]
  }'
{
  "dimensionHeaders": [
    {
      "name": "country"
    }
  ],
  "metricHeaders": [
    {
      "name": "activeUsers",
      "type": "TYPE_INTEGER"
    }
  ],
  "rows": [
    {
      "dimensionValues": [
        {
          "value": "Japan"
        }
      ],
      "metricValues": [
        {
          "value": "100000"
        }
      ]
    },
    {
      "dimensionValues": [
        {
          "value": "Hong Kong"
        }
      ],
      "metricValues": [
        {
          "value": "100"
        }
      ]
    },
(略)
  ],
  "rowCount": 11,
  "metadata": {
    "currencyCode": "JPY",
    "timeZone": "Asia/Tokyo"
  },
  "kind": "analyticsData#runReport"
}

とりあえずデータを取得できた。

fujimotoshinjifujimotoshinji

RunReport API リファレンス

https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport?hl=ja

主要な RunReport で指定可能なパラメータは以下の通り。

パラメータ 説明
dimensions 集約する単位。GROUP BY みたいなの?
metrics 取得する集計値
dateRanges 日付範囲
dimensionFilter dimension に対する絞り込み条件
metricFilter 集計値に対する絞り込み条件
orderBys 並び替え条件
limit 取得件数

dimensions、dimensionFilter に指定可能なフィールド

https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema?hl=en#dimensions

metrics、metricFilter に指定可能なフィールド

https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema?hl=en#metrics

fujimotoshinjifujimotoshinji

カスタムイベントの平均値を取得する

あるサイトでサイト内検索の検索キーワードとヒット件数をカスタムイベントで送信しています。
レポートとして過去 1ヶ月の検索キーワードと平均ヒット件数を検索回数が多い順に取得したかったです。

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://analyticsdata.googleapis.com/v1beta/properties/$GA4_PROPERTY_ID:runReport" -d'{
    "dateRanges": [{ "startDate": "2022-09-01", "endDate": "2022-10-30" }],
    "dimensions": [{ "name": "customEvent:keyword" }],
    "metrics": [
      { "name": "averageCustomEvent:count" },
      { "name": "countCustomEvent:count" }
    ],
    "orderBys": [{
      "desc": true,
      "metric": { "metricName": "countCustomEvent:count" }
    }],
    "limit": 1000
  }'

テストデータなので結果がわかりにくいけど正常に取得できていました。

{
  "dimensionHeaders": [
    {
      "name": "customEvent:keyword"
    }
  ],
  "metricHeaders": [
    {
      "name": "averageCustomEvent:count",
      "type": "TYPE_STANDARD"
    },
    {
      "name": "countCustomEvent:count",
      "type": "TYPE_INTEGER"
    }
  ],
  "rows": [
    {
      "dimensionValues": [
        {
          "value": "aaa"
        }
      ],
      "metricValues": [
        {
          "value": "2"
        },
        {
          "value": "3"
        }
      ]
    }
  ],
  "rowCount": 1,
  "metadata": {
    "currencyCode": "JPY",
    "timeZone": "Asia/Tokyo"
  },
  "kind": "analyticsData#runReport"
}
fujimotoshinjifujimotoshinji

Appendix. API の有効化は何をしたの?

Google Cloud のコンソールにアクセスすると Quickstart というプロジェクトが作成されている。

認証情報に OAuth 2.0 クライアント ID が生成されている。

gcloud コマンドはこの認証情報を使って Google にログインして、Google アカウントとしてデータにアクセスしているようです。

このスクラップは2023/06/25にクローズされました