[PHP] Google Analytics API v3.0 を使って解析データを取得する

Google Analytics API v3.0 を使って解析データを取得してみたいと思います。API はプロファイル情報などを取得できる Management API と解析データを取得できる Core Reporting API と分かれていますが、ライブラリを使用すれば特に意識することなく使えます。

前準備

プログラム云々に入る前に準備を行います。今回は OAuth 2.0 を使って認証を行います。そのために OAuth 2.0 Client ID を取得する必要がありますので、Google APIs Console へ行って取得します。

0. プロジェクト作成

プロジェクトがない場合は「Create Project...」をクリックして作成します。

1. Analytics API を ON にする

Services では、プロジェクトで使用する API の ON, OFF を切り替えられます。今回は Analytics を使用するので Analytics API を ON にします。

2. OAuth 2.0 Client ID を作成する

API Access に行き「Create an OAuth 2.0 Client ID...」をクリックします。「Product name」を入力して次へ進みます。「Product name」は作成後でも変更可能です。

「Application type」には「Web application」を選択し、リダイレクト先となる「Your site or hostname」を入力します ( ローカルホストも可能 )。リダイレクト先は作成後でも変更可能です。

作成が完了すると、API Access ページに以下の様な項目が表示されます。今回使用するのは「Client ID」「Client secret」「Redirect URIs」の 3 つです。

ライブラリ

Core Reporting API Client Libraries & Sample Code (v3) にライブラリ一覧があります。今回は PHP なので「Google APIs Client Library for PHP」を使います。このライブラリは Analytics だけではなく、他の API にも使用可能です。バージョンは 0.6.0 です。

プロファイル一覧を取得する

説明するよりやってみるということで、説明はコメントで…。バージョン 0.6.0 に合わせてプログラム修正しました。

<?php
// ライブラリ読み込み
require('./google-api-php-client/src/Google_Client.php');
// Analytics なのでこれを
require('./google-api-php-client/src/contrib/Google_AnalyticsService.php');

// セッションスタート
session_start();

$client = new Google_Client();

// クライアントID
$client->setClientId('ここにClient IDを入力');
// クライアントSecret
$client->setClientSecret('ここにClient secretを入力');
// リダイレクトURL
$client->setRedirectUri('ここにRedirect URIsを入力');

$service = new Google_AnalyticsService($client);

// 許可されてリダイレクトされると URL に code が付加されている
// code があったら受け取って、認証する
if (isset($_GET['code'])) {
	// 認証(トークン、リフレッシュトークンを取得)
	$client->authenticate();
	// 取得したトークンをセッションにセット
	$_SESSION['token'] = $client->getAccessToken();
	// リダイレクト(ここらへんは任意に)
	header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
	exit;
}

if (isset($_SESSION['token'])) {
	// トークンセット
	$client->setAccessToken($_SESSION['token']);
}

// トークンがセットされていたら
if ($client->getAccessToken()) {

	// ~all で全てのプロファイルを取得します
	// 第一引数にはアカウントIDを指定することで指定したアカウントのプロファイルのみ取得出来ます
	// 第二引数にはWebプロパティID(UA-なんたらのやつ)を指定することで、指定したプロファイルだけを取得出来ます(アカウントIDも指定が必要)
	$profiles = $service->management_profiles->listManagementProfiles("~all", "~all");
	echo '<table><tbody>';
	foreach ($profiles['items'] as $profile) {
		echo "<tr><th>{$profile['name']}</th><td>{$profile['id']}</td></tr>";
	}
	echo '</tbody></table>';

// トークンがセットされてなかったら
} else {
	
	// 認証用URL取得
	$auth_url = $client->createAuthUrl();
	echo '<a href="'.$auth_url.'">アプリケーションのアクセスを許可してください。</a>';
	
}

プロファイル一覧を取得するには、ManagementProfilesServiceResourcelistManagementProfilesメソッドを使います。返ってくる値はリファレンスに書かれている形と一緒です。

人気コンテンツ上位 10 件取得

2012-12-01 ~ 2012-12-31 間の、ページビュー数の多い上位 10 件のページタイトル、ページパス、ページビュー数を取得してみます。

if ($client->getAccessToken()) {

	try {
		// プロファイルID
		$ids = 'ga:ここにプロファイルIDを入力';
		// 期間(スタート)
		$start_date = '2012-12-01';
		// 期間(エンド)
		$end_date = '2012-12-31';
		// メトリクス,複数の場合は , で区切る
		$metrics = 'ga:pageviews';
		// ディメンション,複数の場合は , で区切る
		$dimensions = 'ga:pageTitle,ga:pagePath';
		// ソートする項目, - をつけると降順になります
		$sort = '-ga:pageviews';
		// 最大取得数
		$max_results = 10;
		// ディメンションやソートなどの必須でないものは、オプションとして一つの配列としてまとめます
		$optParams = array('dimensions' => $dimensions, 'sort' => $sort, 'max-results' => $max_results);
		$data = $service->data_ga->get($ids, $start_date, $end_date, $metrics, $optParams);
		
		// 返ってきたデータは表示する時ちょっと分かりづらいので、ちょっと形を整えます
		$results = array();
		foreach ($data['rows'] as $row => $value) {
			foreach ($data['columnHeaders'] as $key => $header) {
				$results[$row][$header['name']] = $value[$key];
			}
		}
		
		$site_url = 'http://example.com';
		echo '<table><tbody>';
		foreach ($results as $result) {
			echo "<tr><td><a href=\"{$site_url}{$result['ga:pagePath']}\">{$result['ga:pageTitle']}</a></td>
<td>{$result['ga:pageviews']}</td></tr>";
		}
		echo '</tbody></table>';

	// エラーの時は例外を投げます
	} catch (apiServiceException $e) {
		echo $e->getMessage();
	}

}

解析データ取得にはDataGaServiceResourcegetメソッドを使用します。返ってくる値はリファレンスに書かれている形とほぼ一緒です。解析データのページタイトルなどはディメンションとメトリクスの指定した順番で配列に入っているのですが、表示するときに $result[0] とかでは分かりづらいのでちょっと形を整えてます。

エラーの時は例外を投げます。ExceptionではなくapiServiceExceptionにしています。apiServiceException クラスはapiClient.phpの一番下に書かれています。Exception を継承して作られてはいますが、何も追加されたりしてないので、自分で追加しない限りは Exception と変わりありません。

指定できるメトリクス、ディメンションは Dimensions & Metrics Reference を参考にしてください。その他、エクセルでGA Data Export API 一覧、作りました | カグア!Googleアナリティクス活用塾 の一覧が分かりやすいです。

参考

変更履歴

2013-01-10

ライブラリのバージョンが 0.6.0 になりクラス名が変更されていたので、プログラムを修正しました。

Trackbacks & Pingbacks

Comments

Name
Mail(任意) 公開されません
Web Site(任意)
Comment

日本語が含まれない投稿は無視されますのでご注意ください