Google APIs Node.js Client を使って Google Analytics のページビューを取得する

Google Analytics の PV を集計し、ダウンロードしたい

Google Analytics は Web サイト向けのアクセス解析サービスです。Web ページに JavaScript コードを設定するだけで簡単にページビュー (PV) を集計できます。最もポピュラーなアクセス解析サービスであり、国内・国外問わずほとんどの Web サイトで導入されています。

集計結果は Web 管理画面から閲覧することができますが、別な用途で使いたい場合はエクスポートが必要です。そこで本記事では Google API の Node.js クライアントライブラリである「google-api-nodejs-client」を使って、プログラムから取得してみました。

検証環境

  • macOS Sierra 10.12.3
  • Node.js v6.11.0
  • google-api-nodejs-client 20.0.1

事前準備

プログラミングに入る前に、Google API にアクセスするための認証情報を取得する必要があります。まずはその作業から始めましょう。

Google API コンソールでプロジェクトを作成する

まずは以下にアクセスし、新規プロジェクトを作成します。

ga-01

Analytics API を有効化し、クレデンシャルファイルをダウンロードする

次に Google API にアクセスするための認証クライアントを作成します。以下にアクセスし「Analytics API」を選びます。

ga-02

上部の「有効化する」をクリックします。有効化されたら「認証情報を作成」をクリックします。

ga-03

「API を呼び出す場所」は「ウェブサーバー」、「アクセスするデータの種類」は「アプリケーションデータ」を選択します。

「サービスアカウント名」は適当に決め、「役割」は「プロジェクト」の中の「閲覧者」を選択します。「サービスアカウント ID」は後で必要になるのでメモしておいてください。「キーのタイプ」は「JSON」を選択します。

ga-04

自動的に JSON ファイルがダウンロードされます。こちらがクレデンシャルファイルです。key.json にリネームしておきます。こちらは後で使います。

Google Analytics の閲覧権限を与える

対象の Web サイトの Google Analytics にて権限を付与します。Google Analytics の管理画面の「ビュー」の「ビュー設定」を表示し、「ビュー ID」をメモしておきます。こちらは、後でプログラムで使用します。

ga-05

次に「ユーザー管理」を表示し、先ほどメモしたサービスアカウント ID (example@utopian-plane-xxxxxx.iam.gserviceaccount.com のようなもの) を追加します。

ga-06

以上で権限設定については終わりです。

google-api-nodejs-client の導入

まずは Node.js プロジェクトを作成しましょう。適当なディレクトリを作成し、次の package.json ファイルを作成します。

{
  "name": "ga",
  "version": "1.0.0",
  "description": "",
  "main": "ga.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "suwa.yuki",
  "private": "true",
  "dependencies": {
    "googleapis": "^20.0.1"
  }
}

npm install (yarn を使う場合は yarn install) を実行します。

$ npm install

もし package.json をすでに作成済みなのであれば、以下のコマンドを実行します。

$ npm install googleapis --save

yarn を使う場合は以下のコマンドになります。

$ yarn add googleapis

実装

先ほどダウンロードした JSON ファイルは JWT 形式の認証情報です。こちらをワークディレクトリ直下に置きつつ、以下を実装します。

'use strict'

// google-api-nodejs-client を利用
const google = require('googleapis');
// JWT 形式の認証情報をインポート
const key = require('./key.json');
// 使っているのは client_email と private_key (pem) だけ
const jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key,
  // scope は以下を指定
  ['https://www.googleapis.com/auth/analytics.readonly'],
  null
);
// Google Analytics のクライアントを利用
const analytics = google.analytics('v3');

// 認証
jwtClient.authorize((err, tokens) => {
  if (err) {
    console.log(err);
    return;
  }
  analytics.data.ga.get({
    // ここで JWT クライアントを設定
    'auth': jwtClient,
    'ids': 'ga:' + '<ビュー ID>',
    'start-date': '2017-07-01',
    'end-date': '2017-07-07',
    'metrics': 'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits',
    'dimensions': 'ga:pagePath',
    'sort':'-ga:pageviews'
  }, (err, resp) => {
    if (err) {
      console.log(err);
      return;
    }
    console.log(JSON.stringify(resp));
  });
});

実行

以下のコマンドを実行すると output.json として出力できます。

$ node ga.js | jq . >! output.json

取得したレスポンス

こんな感じのデータが取れます(長いので一部省略)。

{
  "kind": "analytics#gaData",
  "id": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxxxx&dimensions=ga:pagePath&metrics=ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits&sort=-ga:pageviews&start-date=2017-07-01&end-date=2017-07-07",
  "query": {
    "start-date": "2017-07-01",
    "end-date": "2017-07-07",
    "ids": "ga:xxxxxxxx",
    "dimensions": "ga:pagePath",
    "metrics": [
      "ga:pageviews",
      "ga:uniquePageviews",
      "ga:timeOnPage",
      "ga:bounces",
      "ga:entrances",
      "ga:exits"
    ],
    "sort": [
      "-ga:pageviews"
    ],
    "start-index": 1,
    "max-results": 1000
  },
  "itemsPerPage": 1000,
  "totalResults": xxxx,
  "selfLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxxxx&dimensions=ga:pagePath&metrics=ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits&sort=-ga:pageviews&start-date=2017-07-01&end-date=2017-07-07",
  "nextLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxxxx&dimensions=ga:pagePath&metrics=ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits&sort=-ga:pageviews&start-date=2017-07-01&end-date=2017-07-07&start-index=1001&max-results=1000",
  "profileInfo": {
    "profileId": "xxxxxxxx",
    "accountId": "xxxxx",
    "webPropertyId": "UA-xxxxx-x",
    "internalWebPropertyId": "xxxxxxxx",
    "profileName": "example.jp",
    "tableId": "ga:xxxxxxxx"
  },
  "containsSampledData": false,
  "columnHeaders": [
    {
      "name": "ga:pagePath",
      "columnType": "DIMENSION",
      "dataType": "STRING"
    },
    {
      "name": "ga:pageviews",
      "columnType": "METRIC",
      "dataType": "INTEGER"
    },
    {
      "name": "ga:uniquePageviews",
      "columnType": "METRIC",
      "dataType": "INTEGER"
    },
    {
      "name": "ga:timeOnPage",
      "columnType": "METRIC",
      "dataType": "TIME"
    },
    {
      "name": "ga:bounces",
      "columnType": "METRIC",
      "dataType": "INTEGER"
    },
    {
      "name": "ga:entrances",
      "columnType": "METRIC",
      "dataType": "INTEGER"
    },
    {
      "name": "ga:exits",
      "columnType": "METRIC",
      "dataType": "INTEGER"
    }
  ],
  "totalsForAllResults": {
    "ga:pageviews": "xxxxx",
    "ga:uniquePageviews": "xxxxx",
    "ga:timeOnPage": "x.xxx",
    "ga:bounces": "xxxxx",
    "ga:entrances": "xxxxx",
    "ga:exits": "xxxxx"
  },
  "rows": [
    [
      "/path/to/page",
      "xxxxx",
      "xxxxx",
      "xxxxx.x",
      "xxxxx",
      "xxxxx",
      "xxxxx"
    ],
    [
      "/path/to/page",
      "xxxxx",
      "xxxxx",
      "xxxxx.x",
      "xxxxx",
      "xxxxx",
      "xxxxx"
    ],
    [
      "/path/to/page",
      "xxxxx",
      "xxxxx",
      "xxxxx.x",
      "xxxxx",
      "xxxxx",
      "xxxxx"
    ],
    ...
  ]
}

まとめ

Google Analytics の集計データを簡単にプログラムから取得できました。Web サイトの運用の際にはぜひ参考にしてください!

参考