はじめてのGoogle Analytics Reporting APIをNode.jsでちょっとだけ使ってみる
以前の投稿でGoogle AnalyticsとGoogle Cloud Platformを設定してGoogle Analytics Reporting APIを使えるようにしました。
今回は、自分のQiitaのページにアナリティクスを設定、Qiitaページ用のサービスアカウントを作ったので、その情報をNode.jsを使ってAPIで取得してみたいと思います。 ちなみに、Node.jsは未経験です、ずぶのど素人です。
準備する
環境 : Windows10 Pro バージョン1909
- Node.jsをインストールする
- 参考 : Node.jsをインストールする - Qiita
- 今回インストールしたバージョンは「v10.23.1」でした
- yarnをインストールする
- 参考 : yarnをインストールする - Qiita
- 今回インストールしたバージョンは「1.22.10」
- 作業用のディレクトリを作成する(ここ以降は下記のコードを参照)
- yarnの初期化する
- GoogleAPIのNode.js用ライブラリgoogle-api-nodejs-clientをインストールする
- Google Cloud Platformで作成したサービスアカウントの鍵ファイル(json)を格納するためのディレクトリを作成する
- 鍵ファイル(json)を格納する
# 作業用のディレクトリを作成する $ mkdir google-analytics-api $ cd google-analytics-api/ # yarnの初期化する $ yarn init ...省略... Done in 93.28s. # GoogleAPIのNode.js用ライブラリgoogle-api-nodejs-clientをインストールする $ yarn add googleapis yarn add v1.22.10 info No lockfile found. [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... success Saved lockfile. success Saved 31 new dependencies. info Direct dependencies └─ googleapis@68.0.0 info All dependencies ├─ abort-controller@3.0.0 ...省略... Done in 7.96s. # Google Cloud Platformで作成したサービスアカウントの鍵ファイル(json)を格納するためのディレクトリを作成する $ mkdir config # 鍵ファイル(json)を格納する $ ls config/ client_secrets.json
コードを書く
Google APIでの認証については、Analytics Reporting API - 承認 | アナリティクス Reporting API v4が参考になります。
analytics.js
というファイルを作って以下のコードを書きました。
リクエストの内容についてはメソッド: reports.batchGet | アナリティクス Reporting API v4 | Google Developersを見ながらしてする値を決めました。
const { google } = require('googleapis') const KEY_FILE = './config/client_secrets.json' // 鍵ファイルのパスを指定する const VIEW_ID = 'GoogleアナリティクスのViewID' /** * Auth2.0認証をしてクライアントを取得する * @returns クライアント */ async function getAnalyticsreportingClient() { const client = await google.auth.getClient({ keyFile: KEY_FILE, scopes: 'https://www.googleapis.com/auth/analytics.readonly' }) const analyticsreporting = google.analyticsreporting({ version: 'v4', auth: client }) return analyticsreporting } /** Google Analyticsから情報を取得する */ async function getReporting() { const client = await getAnalyticsreportingClient() // 取得期間をyyyy-MM-dd形式で指定 let dateRanges = [{startDate: '2021-03-19', endDate: '2021-03-30'}] const res = await client.reports.batchGet({ requestBody: { reportRequests: [ // 指定期間でのPV数TOP3のページを取得するリクエスト { viewId: VIEW_ID, dateRanges: dateRanges, dimensions: [{name: 'ga:pagePath'}], // ページ単位の情報を取得する metrics: [{expression: 'ga:pageviews'}, {expression: 'ga:avgTimeOnPage'}], // PV数と平均ページ滞在時間を取得する orderBys: {fieldName: 'ga:pageviews', sortOrder: 'DESCENDING'}, // PV数の降順でソートする pageSize: 3 // 3件分取得する }, // 直近1週間での平均ページ滞在時間TOP3のページを取得するリクエスト { viewId: VIEW_ID, dateRanges: dateRanges, dimensions: [{name: 'ga:sourceMedium'}], // ページ単位の情報を取得する metrics: [{expression: 'ga:bounceRate'}, {expression: 'ga:avgTimeOnPage'}], // 直帰率と平均ページ滞在時間を取得する orderBys: {fieldName: 'ga:avgTimeOnPage', sortOrder: 'DESCENDING'}, // 平均ページ滞在時間の降順でソートする pageSize: 3 // 3件分取得する } ] } }) // コンソールに取得内容を表示 console.log(JSON.stringify(res.data)) } getReporting()
Reporting APIを呼び出す
早速、ターミナルから実行してみます。本当はレスポンスが1行なのですが、見にくいので改行などを入れています。
$ node analytics.js {"reports":[ { "columnHeader":{"dimensions":["ga:pagePath"],"metricHeader":{"metricHeaderEntries":[{"name":"ga:pageviews","type":"INTEGER"},{"name":"ga:avgTimeOnPage","type":"TIME"}]}}, "data":{"rows":[ {"dimensions":["/ponsuke0531/items/4629626a3e84bcd9398f"],"metrics":[{"values":["1631","387.46666666666664"]}]}, {"dimensions":["/ponsuke0531/items/df51a784b5ff48c97ac7"],"metrics":[{"values":["1160","601.5056179775281"]}]}, {"dimensions":["/ponsuke0531/items/edf2eee638202aa7f61f"],"metrics":[{"values":["999","401.8253968253968"]}]} ], "totals":[{"values":["35429","382.3464974141984"]}], "rowCount":499, "minimums":[{"values":["1","0.0"]}], "maximums":[{"values":["1631","1679.0"]}]}, "nextPageToken":"3" }, { "columnHeader":{"dimensions":["ga:sourceMedium"],"metricHeader":{"metricHeaderEntries":[{"name":"ga:bounceRate","type":"PERCENT"},{"name":"ga:avgTimeOnPage","type":"TIME"}]}}, "data":{"rows":[ {"dimensions":["27.94.140.223:8080 / referral"],"metrics":[{"values":["0.0","1335.0"]}]}, {"dimensions":["nekorokkekun.hatenablog.com / referral"],"metrics":[{"values":["0.0","996.0"]}]}, {"dimensions":["zenn.dev / referral"],"metrics":[{"values":["0.0","909.0"]}]} ], "totals":[{"values":["86.22115384615384","382.3464974141984"]}], "rowCount":69, "minimums":[{"values":["0.0","0.0"]}], "maximums":[{"values":["100.0","1335.0"]}]}, "nextPageToken":"3" } ]}