Google Analytics Reporting API v4からGoogle Analytics Data API(GA4)に切り替えた

2023年2月5日(日) 19時3分45秒 | 549 view |

UA→GA4への変更に合わせてこのブログで使っているpvシステムもAPIの切り替えを行いました。


重い腰を上げた感じです。

とりあえず導入部分については公式リファレンスとクイックスタートを参考にサクサク行いました。
https://developers.google.com/analytics/devguides/reporting/data/v1?hl=ja

導入についてはいろいろな方がブログで書いているので自分はReportingAPIとDataAPIの相違点を中心に解説します。
言語はnode.jsです

credentialの読み込み方

引数に渡す形から環境変数に入れる形になりました

// Reporting API v4
const client = await google.auth.getClient({
  keyFile: './service-account-credentials.json',
  scopes: 'https://www.googleapis.com/auth/analytics.readonly',
})

// Data API
process.env.GOOGLE_APPLICATION_CREDENTIALS='./service-account-credentials.json';


使用するパッケージ

ごちゃ混ぜパッケージからData API専用の軽量なパッケージになりました

// Reporting API v4
> npm i googleapis

// Data API
> npm i @google-analytics/data


メソッド

batchGet()からrunReport()になりました
階層構造が少なくなってシンプルになりました
dimensionsmetricsがだいぶ変わりました
https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema
filterが直感的に書きやすくなりました
https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/FilterExpression

コード例:パスに"post"を含むURLのページビュー数を取得する

// Reporting API v4
const res = await analyticsreporting.reports.batchGet({
  requestBody: {
    reportRequests: [
      {
        viewId: '230865015', // ビュー ID を指定する
        dateRanges: [
          {
            startDate: '2020-09-01',
            endDate: 'today',
          },
        ],
        metrics: [{ expression: 'ga:pageviews' }],
        dimensions: [{ name: 'ga:pagePath' }],
        dimensionFilterClauses: [{
          filters : [{
            "dimensionName": 'ga:pagePath',
            "operator": 'PARTIAL',
            "expressions": [
              'post'
            ],
          }]
        }],
      },
    ],
  },
})

// Data API
propertyId = '295516954';
const [response] = await analyticsDataClient.runReport({
  property: `properties/${propertyId}`,
  dateRanges: [
    {
      startDate: '2021-12-01',
      endDate: 'today',
    },
  ],
  dimensions: [{ name: 'pagePath' }],
  metrics: [{ name: 'screenPageViews' }],
  dimensionFilter: {
    filter: {
      "fieldName": 'pagePath',
      "stringFilter": {
        "matchType": "CONTAINS",
        "value": "post",
        "caseSensitive": true
      },
    }
  }
});


ということで無事完了
これで今年7月のUA終了に備えようと思います。