【Node.js】Analytics Reporting API v4 を使ってGoogle Analyticsのデータを取得する

2021.04.09

吉川@広島です。

Google Analytics (以下GA) の Analytics Reporting API からデータを取得する検証を行ったので共有します。

下記は Python で取得する方法の紹介記事になります。

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

本記事では Node.js (TypeScript) を用いて取得していきます。

環境

  • macOS Catalina 10.15.7
  • Node.js 14.13.0
  • TypeScript 4.1.3
  • yarn 1.22.0

Analytics Reporting API を使う準備

冒頭紹介の記事と全く同じのため、割愛します。

注意点

私が試した際にハマった点を共有します。

GA プロパティ作成時、 「ユニバーサルアナリティクスプロパティの作成」をオンにする

取得したい GA のデータを指定するにあたり、ビュー のID が必要になります。
プロパティとビューの関係性については下記が参考になります。

組織、アカウント、ユーザー、プロパティ、ビューの階層構造

ただ、デフォルト設定でプロパティ作成した場合、ビューが存在せずこれを取得することができないようです。

How do I get View ID from Google Analytics 4?

対処法として、プロパティ作成時に「ユニバーサルアナリティクスプロパティの作成」をオンに入れておくと、ビューが存在するプロパティが作成されるようになります。

プロパティ作成時に「詳細オプションを表示」を押下します。

「ユニバーサルアナリティクスプロパティの作成」が出てくるので、トグルスイッチをオンを入れます。
「ウェブサイトのURL」を入力し、「次へ」を押下して作成作業を進めて下さい。

プロパティ作成完了後、「UA-」で始まる ID のプロパティができていますので、これを選択し、「ビューの設定」を押下します。

すると、ビュー ID を確認できました。

GCP で Analytics Reporting API を有効化する

APIの有効化をうっかり飛ばしてしまうと後述のデータ取得処理の実行時に以下のエラーが発生します。

Error: Analytics Reporting API has not been used in project xxxxxxxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=xxxxxxxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

「Analytics Reporting API が未使用か無効」ということがいわれています。

この場合は Analytics Reporting API を有効にする手順を実施しましょう。

Node.js スクリプトを書き、 GA のデータを取得する

Node.js で Analytics Reporting API を利用するには google-api-nodejs-client を使います。

googleapis/google-api-nodejs-client

私はパッケージマネージャに yarn を使っていますので以下のように導入します。

yarn add google-api-nodejs-client

続いて google-api-nodejs-client を使ったスクリプトを書いていきます。
下の記事を参考にさせて頂きました。

Node.js (JavaScript)で Google Analytics Reporting API v4 を使う

import { google } from 'googleapis'

const main = async () => {
  const client = await google.auth.getClient({
    keyFile: './keys.json', // キー JSON ファイルを配置した場所を指定する
    scopes: 'https://www.googleapis.com/auth/analytics.readonly',
  })

  const analyticsreporting = await google.analyticsreporting({
    version: 'v4',
    auth: client,
  })

  const res = await analyticsreporting.reports.batchGet({
    requestBody: {
      reportRequests: [
        {
          viewId: 'xxxxxxxxx', // ビュー ID を指定する
          dateRanges: [
            {
              startDate: '7daysAgo',
              endDate: 'today',
            },
          ],
          metrics: [{ expression: 'ga:pageviews' }],
          dimensions: [{ name: 'ga:pagePath' }, { name: 'ga:pageTitle' }],
          orderBys: [{ fieldName: 'ga:pageviews', sortOrder: 'DESCENDING' }],
        },
      ],
    },
  })
  console.log(JSON.stringify(res.data))
}

main()

実行すると以下のように取得できました。

{"reports":[{"columnHeader":{"dimensions":["ga:pagePath","ga:pageTitle"],"metricHeader":{"metricHeaderEntries":[{"name":"ga:pageviews","type":"INTEGER"}]}},"data":{...}

以上、参考になれば幸いです。

本文紹介以外の参考資料