node.jsでGoogle analyticsレポートの値を取得する

Google analyticsのレポートの値を取得する方法をあれこれ調べていたのでひと通りまとめてみました。

npmのパッケージとしては、sfarthin/ga-analytics · GitHubというのがあるので、これを利用するとあっさりレポートの値は取れるのですが、Google analyticsAPIを利用するため、以下の手順が必要です。

  1. Google Developer Consoleでサービスアカウントを準備する
  2. Google analyticsにユーザを追加する
  3. Developer consoleで取得した.p12証明書をpem形式に変換する

上の手続きをひと通り行うとGoogle analyticsのレポートの値を取得できる様になります。


Google Developer Consoleでサービスアカウントを準備する

Google Developer Console にログインしてまずは新規プロジェクトを作成します。

次にGoogle analyticsAPIを選びます。APIの利用ON/OFFをONに切り替えます。

次に左側のメニューにある「APIと認証」の「認証情報」を選択して、新しいクライアントIDの作成を行います。

上記の手続きが完了すると以下の画面が表示されるので

  • ①クライアントID
  • ②メールアドレス
  • ③自動的にダウンロードされる.p12(PKCS12)形式の証明書
  • ④パスワード*1

を控えます。

Google analyticsにユーザを追加する

Google developer console 上からAPIを利用できる状態にしても、Google analyticsにユーザを追加しないと実際にGoogle analyticsのパラメータを取得することはできないので、Google analytics上からユーザを追加します。

Google analyticsの「アナリティクス設定」を開いて

上記の箇所に先のDeveloper consoleで追加されたメールアドレス(〜@developer.gserviceaccount.com) を入力してユーザとして追加します。

続けて実際に取得したいGoogle analyticsのレポートを識別するためにビューIDという値があるので

を開くと、以下の箇所にビューIDがあるのでこれを控えます。

  • ⑤取得したいレポートのビューID

Developer consoleで取得した.p12証明書をpem形式に変換する

OpenSSLのコマンドを利用して証明書の形式を変換します。パスワードの部分には④で表示されていたものを入力します。

openssl pkcs12 -in key.p12 -nocerts -passin pass:***** -nodes -out key.pem

ここで出力された証明書ファイルのパスを控えておきます。

  • ⑥PEM形式に変換された証明書ファイル

ga-analyticsを利用してGoogle analyticsの値を取得

ここまでで準備は完了したので実際にsfarthin/ga-analytics · GitHubを利用してレポートの値を取得してみます。

試しに恥ずかしながらこのブログのページビューを...。

$ npm install ga-analytics --save

として ga-analytics のインストールを行った上で

var gaAnalytics = require("ga-analytics");

var CLIENT_ID = '****.apps.googleusercontent.com';   // ①
var SERVICE_ACCOUNT_EMAIL = '****@developer.gserviceaccount.com';   // ②
var SERVICE_ACCOUNT_KEY_FILE = '/home/hideack/key.pem';   // ⑥

gaAnalytics({
  metrics: "ga:pageviews",
  clientId: CLIENT_ID,
  serviceEmail: SERVICE_ACCOUNT_EMAIL,
  key: SERVICE_ACCOUNT_KEY_FILE,
  ids: "ga:*****"   // ⑤
}, function(err, res) { 
  if(err) throw err;
  console.log(res.totalsForAllResults);
});

これで出力してみると。

{ 'ga:pageviews': '1973' }

といった形。実際にAnalyticsでレポートの値を確認すると同じ値が取れることがわかります。

*1:多分だけどこれ固定ですね...