Google Analytics API を PHP から使う

はじめに

この記事は、次の記事を現在(2016年4月)の Google Analytics およびその API の実情に合わせて書き直したものである。

人気記事ランキングを作成する処理等、ユーザが操作を介することのないバックエンドのプログラムが Google Analytics API にアクセスする方法について説明している。

1. API を利用可能にする

前準備として、Google Developer Console にアクセスして API を有効にする必要がある。

Google Developer Console を開き、プロジェクトを選択するか、無ければ作成する。

API の検索ボックスから「Analytics API」を検索し、名前をクリックすると API の詳細が表示されるので、その画面から有効にする。

2. API アカウントを作成し、キーを取得する

プロジェクトを作成・選択したら、「認証情報」をクリックして API にアクセスするための「サービス アカウント」を作成する。

認証情報が作成されていない場合は次のような画面になるので、「認証情報を作成」→「サービス アカウント キー」を選択する。

サービス アカウント キーの作成という画面になるので、「Service account name」にサービス名を入力する。サービス名を入力すると「サービス アカウント ID」は自動入力されるので、変更が必要なければそのままでよい。そして「キーのタイプ」は必ず「P12」を選択するGoogle APIs Client Library for PHP が P12 形式にしか対応していないためだ。

サービス アカウントを作成すると、自動的にキーのダウンロードが始まる。この *.p12 ファイルを保存しておく。
次にサービス アカウント ID を確認する。サービス アカウント ID はメールアドレス形式の ID で、「サービス アカウントの管理」から確認できる。

3. Analytics へのアクセス権限を API アカウントに付与する

前項で作成したサービス アカウントが Analytics のデータにアクセスできるよう、権限を付与する必要がある。

Google Analytics にアクセスし「アナリティクス設定」を開く。

アクセスを許可したいアカウントを選択し、「ユーザー管理」を開く。そこに「権限を付与するユーザー」という項目があるので前項で作成した「サービス アカウント ID」を入力する。

権限は「表示と分析」のままでよい。ここで「追加」を行うと、API から Analytics のデータを取得することができるようになる。

4. Google APIs Client Library for PHP を設定する

PHP から API を利用するために、Google APIs Client Library for PHP をインストールする。

PHP のパッケージマネージャ Composer を使用する場合は、ライブラリを灰位置するディレクトリに次の内容の composer.json を作成し、composer install コマンドを実行する。

{
    "require": {
        "google/apiclient": "1.1"
    }
}

5. API を使い Analytics データを取得する

準備が整ったら API からデータを取得してみよう。次のコードは過去 30 日分を対象に、サイト内(ビュー)でよくアクセスされているページのタイトル、URL、セッション数を取得するものである。

その他、取得できる主なデータは次項で説明している。

<?php
require_once 'my_google_analytics.php';

$ga = MyGoogleAnalytics::get();
$result = $ga->data_ga->get(
	'ga:XXXXX', // XXXXX の部分は Analytics のビュー ID
	'30daysAgo', // 開始日 ("2016-04-04" という指定もできる)
	'today', // 終了日
	'ga:sessions', // 主要指標 (metrics)
	[
		'dimensions' => 'ga:pageTitle,ga:pagePath', // 副指標
		'sort' => '-ga:sessions', // - を付けると降順ソート
		'max-results' => 10, // 取得件数
	]);

// 2次元配列として取得できるのでこれを加工する
print_r($result->getRows());

ここで読み込んでいる my_google_analytics.php の内容は次の通り。サービス アカウント ID と秘密鍵 (P12) ファイルを指定するだけですぐに使えるようになる。

<?php
// Composer により作成された verndor/autoload.php を読み込む
require_once 'path/to/vendor/autoload.php';

class MyGoogleAnalytics {

	// サービス アカウント ID
	const SERVICE_ACCOUNT_ID = 'XXXXXXXXXXXXXXXX@XXXXXXXXXXX.iam.gserviceaccount.com';

	// 秘密鍵のファイル名
	const KEY_FILE = 'path/to/XXXXXXXX.p12';
	
	private static $client;
	private static $service;

	public static function get() {
		if (!isset(self::$client)) {
			self::createClient();
		}
		if (!isset(self::$service)) {
			self::createService();
		}
		return self::$service;
	}

	private static function createClient() {
		$client = new Google_Client();

		// もしサーバの /var/tmp に書き込めないなどの事情がある場合は
		// ここでキャッシュファイルを生成するディレクトリを指定する
		//$client->setClassConfig('Google_Cache_File', ['directory' => __DIR__ . '/tmp']);

		// アプリ名。どこで使うのかは不明
		$client->setApplicationName('My Access Analysis');

		$cred = new Google_Auth_AssertionCredentials(
			self::SERVICE_ACCOUNT_ID,
			[Google_Service_Analytics::ANALYTICS_READONLY],
			file_get_contents(self::KEY_FILE)
		);
		$client->setAssertionCredentials($cred);
		if ($client->getAuth()->isAccessTokenExpired()) {
			$client->getAuth()->refreshTokenWithAssertion($cred);
		}
		
		self::$client = $client;
	}

	private static function createService() {
		self::$service = new Google_Service_Analytics(self::$client);
	}
}

6. 取得できるデータの種類

指標 metrics および dimension で指定できる項目はこのページで参照できる。

主な指標を挙げておく。

  • Metrics
    • ga:sessions セッション数
    • ga:users ユーザ数
    • ga:pageviews ページビュー
  • Dimensions
    • ga:userType 新規訪問/リピート訪問 (例: New Visitor, Returning Visitor)
    • ga:medium 参照元の種類 (例: organic, referral, (none))
    • ga:source 参照元 (例: google, yahoo, (direct), example.com)