定期的にやっている気がするけど現時点で良さそうと思えるGoogleAnalyticsAPIをNodeクライアントでたたくための方法
GoogleCloudPlatformを使っているとサービスアカウントを作ってキーのパスを環境変数にセットすればよしなにやってくれるので便利で良いなと思っていました
GoogleAnalyticsAPIも同じような感じで処理できれば楽だなと思い調べてみたもののあんまり出てこなかったので残しておく
結論ソース読んだほうがよいよという話になりそうだけど勉強になったのでどこかの誰かのためになればうれしいです
google-api-nodejs-client
最初@google-cloud
にあるかと思い探してみたがやはり別な模様
AnalyticsAPIは上記module
から使う
install
npm install --save googleapis
認証に関して
@google-cloud/storageなどのGoogleCloudのモジュールを使用している場合
GOOGLE_APPLICATION_CREDENTIALS
にサービスアカウントのcredentialのパスをセットしてあれば認証を通してくれます
googleapisでも同様に認証を通したいと思っていたらちゃんとREADMEに載っていました
下記はcompute
に対して実行しているサンプル
これをAnalyticsReportingでも同じようにできれば良さそう
ReportingAPIを扱うソースコード
ここを見に行くと該当のAPIはanalyticsreporting
を持ってくればよい感じですね
google-api-nodejs-client/index.ts at master · googleapis/google-api-nodejs-client
次のソースからanalyticsreporting.reports.batchGet
でAPIをたたけそう
google-api-nodejs-client/v4.ts at master · googleapis/google-api-nodejs-client
batchGetに投げるパラメータは下記から探せば良さそう
メソッド: reports.batchGet | アナリティクス Reporting API v4 | Google Developers
ペイロードの渡し方は下記ソースをしっかり追えば分かる
google-api-nodejs-client/v4.ts at master · googleapis/google-api-nodejs-client
TypeScriptで書かれているので型情報がしっかり載っていてわかりやすい
サンプルを書いてみる
ということで情報がそろってきたのでサンプルを書いてみる
- sample.js
const {google} = require('googleapis'); const analyticsreporting = google.analyticsreporting('v4'); const hoge = async () => { const auth = new google.auth.GoogleAuth({ scopes: ['https://www.googleapis.com/auth/analytics.readonly'] }); const authClient = await auth.getClient(); const res = await analyticsreporting.reports.batchGet({ auth: authClient, requestBody: { reportRequests: [ { viewId: 'ga:xxxxxxx', dateRanges: [ { startDate: "2020-03-15", endDate: "2020-04-15" } ], metrics: [{expression: 'ga:pageViews'}], dimensions: [{name: 'ga:pagePath'}], pageSize: 5000 } ] } }) const json = JSON.stringify(res.data.reports[0]) console.log(json); } hoge()
googleapisの各種メソッドはパラメータにauth
を受け付けているよう
で、そのauthにgoogle.auth.GoogleAuth
から生成したauthClient
を渡してあげればよい
サービスアカウントでgoogleapisを使うときはこの方法で認証通すのが良さそうに思える
スッキリした感!
GCP上での実行に関して
CloudFunctionやGCEなどGCPのサービス上で実行する場合
アクセス制御 | Google Cloud Functions に関するドキュメント
にあるようにCloudFunctionsのデフォルトのサービスアカウントはPROJECT_ID@appspot.gserviceaccount.com
なので次のAnalytics管理画面メニューをクリックしユーザーのアドレスを追加してあげればサービスアカウントからAPIをたたけるようになる
まとめ
- GoogleAnalyticsReportingAPI(v4)をgoogleapis nodeクライアントで使えるようにした
google.auth.GoogleAuth
を用いてサービスアカウントで認証済みのclientを取得できる
- 結局READMEちゃんと読め案件だった
- 他記事を漁ってみた感じ
analyticsreporting
とanalytics
を使うパターンがあったがanalytics
はv3だった- レポーティングのみで使用するなら
analyticsreporting
を使うのが良さそう
- レポーティングのみで使用するなら
実際APIたたいてみた感じレスポンスのフォーマットが面倒そうな感じだったのでそれはまた頑張ってTransformします…