【Node.js】Analytics Reporting API v4 を使ってGoogle Analyticsのデータを取得する
吉川@広島です。
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":{...}
以上、参考になれば幸いです。