初心者でも分かる!なGoogle Analytics APIの使い方

この記事のイメージ

このブログのサイドバー辺りに人気記事一覧というコンテンツを作りたくて、そのソースを何にしようかなーと思っていたところ、アクセス解析ツールの「Google Analytics」から、APIを利用してデータを取得できることを知りました。この記事では、初心者の方向けに、Google Analytics APIの使い方を解説します。

サンプルデモ

Google Analytics APIを利用したプログラムのサンプルです。このブログの、昨日のページビュー数TOP3を表示します。Google Analyticsのデータを利用した最もオーソドックスな利用方法である、人気記事ランキングの作成例ですね。

デモを見る

必要なもの

Google Analytics APIを利用するためには、Googleのユーザーアカウントが必要です。まだ所有していない人は下記ページから作成して下さい。また、このブログではプログラミング言語としてPHPを利用するので、PHPが稼働する環境も前提となります。

ユーザーアカウントの作成

Google

普段、Googleのユーザーとして利用しているアカウントがあれば、Google Analyticsを利用できます。

デベロッパー・センター

Google Developers Console
Google Developers Console

まず、Googleの開発者用管理ページである「Google Developers Console」にアクセスして下さい。ログインがまだの人は求められます。このページは、アプリケーションを管理するために利用するページなので、ブックマークしておきましょう。

言語を日本語に設定する

「Account Settings」をクリックする
「Account Settings」をクリックする

初めてGoogle Developers Consoleにアクセスした時、言語が英語になっている場合があります。まずは使いやすいように、日本語に設定しましょう。画面左側の「Account Setting」をクリックして下さい。

LANGUAGEの項目を「日本語」にする
LANGUAGEの項目を「日本語」にする

設定画面に移動します。Language & Formatsという項目の、LANGUAGEを日本語に設定し、「Save」をクリックして下さい。ここでは他に、時間表記、数字表記のフォーマットを設定することができます。要するにこの管理画面上の見栄えですね。自分が使いやすい環境になるよう、設定して下さい。

プロジェクトを作成する

  1. プロジェクトとは?
  2. プロジェクトを作成する

プロジェクトとは?

プロジェクトとは、Googleが提供する様々なAPIを使った様々なアプリケーションの1つのまとまりです。ウェブサイトのことをイメージすると分かりやすいかもしれません。例えば、私の場合は「Syncer」というプロジェクトを作って、そのプロジェクトの中で、Google Analytics APIやGoogle Maps APIを利用するわけです。…ピンと来ない場合も、作業だと思って進みましょう。

プロジェクトを作成する

「プロジェクト」をクリックする
「プロジェクト」をクリックする

それでは、早速、プロジェクトを作成してみましょう。まず、左側メニューにある「プロジェクト」をクリックして下さい。ここが、プロジェクトを管理するページです。これまでに作成したプロジェクトの確認、編集、削除などはここから行なうので、覚えておいて下さい。

「プロジェクトを作成」をクリックする
「プロジェクトを作成」をクリックする

プロジェクトを作成するには、上部の「プロジェクトを作成」というボタンをクリックして下さい。

プロジェクト名を入力する
プロジェクト名を入力する

プロジェクトの作成はとても簡単で、ただ、半角英数字と一部記号で名前を決めるだけです。「プロジェクト名」の項目に好きな名前を入力して下さい。通常はウェブサイト名などでしょう。「プロジェクトID」の項目はプロジェクトを識別するための一意のIDです。ここは自動で決定されるので、変更する必要はありません。準備ができたら、「作成」をクリックして下さい。クリックしてしばらく待つと、プロジェクトの作成が完了します。

クライアントIDを作成する

  1. クライアントIDとは?
  2. クライアントIDの作成
  3. 秘密キーの確認
  4. 各種キーの確認

クライアントIDとは?

クライアントIDは、他のウェブサイトのAPIでいうアプリケーションにあたります。先ほど作成したプロジェクトがウェブサイト全体を表すなら、このクライアントIDは個々のコンテンツということになります。例えば、私の場合は、ラーメンカテゴリでGoogle Maps APIを利用しています。なので、Syncerというプロジェクト内で、ラーメンカテゴリというクライアントIDを作成しているわけです。クライアントIDの集まりが、プロジェクトです。

ここで勘違いとなってはいけないので付け加えておくと、プロジェクトとクライアントIDの関係はどう構成しようと自由です。必ずしも、先ほどの例えのように、「ウェブサイトにつき1つのプロジェクトを作成する」と決まっているわけではなく、1つのウェブサイトに複数のプロジェクトを作成してもかまいません。あくまでも、あなたの管理しやすいように、プロジェクトとクライアントIDを構成して下さい。

クライアントIDの作成

「プロジェクト」をクリックする
「プロジェクト」をクリックする

待機後、プロジェクトの作成が完了すると、図の画面に移動します。ここから操作してもいいのですが、次回以降にまたこのページに戻れるように覚えておくという意味で、左メニューの「プロジェクト」をクリックして下さい。

プロジェクト名をクリックする
プロジェクト名をクリックする

プロジェクト一覧の画面に移動します。ここはプロジェクトの一覧が表示されるページで、先ほど作成したプロジェクトが一覧に加わっているはずです。このプロジェクト名をクリックして下さい。

「認証情報」をクリックする
「認証情報」をクリックする

プロジェクトの管理画面に移動します。左側メニューの「APIと認証」の項目内にある「認証情報」をクリックして下さい。

「新しいクライアントIDを作成」をクリックする
「新しいクライアントIDを作成」をクリックする

クライアントIDの管理画面に移動します。「新しいクライアントIDを作成」をクリックして下さい。

「サービスアカウント」を選択する
「サービスアカウント」を選択する

アプリケーションの種類を選択します。「サービスアカウント」を選択し、「クライアントIDを作成」をクリックして下さい。通常、Twitter APIなどを利用する場合はウェブアプリケーションを利用しますが、今回は「サービスアカウント」を選択して下さい。これはどういうものかというと、あらかじめ、サービス側でクライアントIDに許可を出しておくことで、アクセストークンの発行作業をすることなく、データにアクセスできる性質のものです。サーバー構築経験のある人は、「鍵交換方式による認証」をイメージすると掴みやすいかもしれません。

いずれにしろ、手順に従えば予備知識は不要です。技術的な詳細を知りたい人は、下記の公式ドキュメント(英語)をご参考下さい。

秘密キーの確認

プロジェクト名をクリックする
プロジェクト名をクリックする

「クライアントIDを作成」をクリックすると、「新しい公開キー/秘密キーのペアが生成されました」という確認メッセージが表示されます。「秘密キーのパスワードが下に表示されます。後でもう一度表示することはできません。」とありますが、パスワードはnotasecretとなっているはずです。この値は利用しませんが、心配なら一応、メモしておきましょう。

そして、この確認メッセージが表示されると同時に、秘密キーのファイルが自動的にダウンロードされるはずです。Syncer Analytics-0a6a76b4e70b.p12というような、.p12が拡張子になっているファイルです。これは、とても重要なファイルで、後ほど使うので、保存しておいて下さい。

ファイル名にはプロジェクト名が最初に付いてます。例えば「Syncer Analytics」というプロジェクトを作ったら、秘密キーのファイル名はSyncer Analytics-0a6a76b4e70b.p12となります。ファイル名にスペースが入っているとアレなので、Syncer_Analytics-0a6a76b4e70b.p12というように、ファイル名を変更して下さい。ファイル名は他人に知られてはいけません。が、変更は自由なので、極端な話、a.p12としても働きはします。

各種キーの確認

クライアントIDの情報
クライアントIDの情報

「認証情報」の画面に戻ります。作成したクライアントIDの情報が加わっているはずです。

秘密キーファイルの再発行
秘密キーファイルの再発行

クライアントID情報の下部に、「新しいP12キーを生成」というボタンがあります。ここをクリックすると、秘密キーファイルを新しくダウンロードすることができます。他人にファイル名を知られてしまった可能性がある、ファイルをなくしてしまった…、などの場合にご利用下さい。当然、古いファイルは利用できなくなるのでご注意下さい。

各種キーの確認
各種キーの確認

赤枠部分の「クライアントID」「メールアドレス」を後ほど利用するので、保存しておいて下さい。これで、クライアントIDの作成は完了です。

Analytics APIを有効にする

「API」をクリックする
「API」をクリックする

続いて、このプロジェクトでAnalytics APIを利用できるように設定しましょう。左側メニューの「API」をクリックして下さい。

「Analytics API」を有効にする
「Analytics API」を有効にする

APIの設定画面に移動します。APIの一覧が表示されているので、その中から「Analytics API」の右側にあるボタンをクリックして下さい。

APIが有効になる
APIが有効になる

「有効なAPI」の項目に、Analytics APIが加われば大丈夫です。

クライアントIDのアクセスを許可する

いよいよ準備も最後です。作成したクライアントIDのアプリケーションが、Google Analyticsのデータにアクセスすることを許可します。まずはGoogle Analyticsにログインして下さい。

「アナリティクス設定」をクリックする
「アナリティクス設定」をクリックする

画面上部のメニューにある「アナリティクス設定」をクリックして下さい。

ビューを設定する
ビューを設定する

「アカウント」「プロパティ」「ビュー」を、利用するウェブサイトのものに合わせて下さい。

「ユーザー管理」をクリックする
「ユーザー管理」をクリックする

「ビュー」の項目内にある「ユーザー管理」をクリックして下さい。

メールアドレスを追加する
メールアドレスを追加する

権限の付与設定の画面に移動します。赤枠部分のフォームで、先ほど、クライアントIDを作成した時の、クライアントID情報内にある「メールアドレス」を入力し、画面右側にあるセレクトボックスを開き、「ユーザー管理」「編集」「共有設定」「表示と分析」にチェックを入れて、最後に「追加」をクリックして下さい。

メールアドレスが追加される
メールアドレスが追加される

フォームの上部に、入力したメールアドレスが追加されていれば、大丈夫です。

「ビュー設定」をクリックする
「ビュー設定」をクリックする

「アナリティクス設定」の画面に移動して下さい。「ビュー」の項目内にある「ビュー設定」をクリックして下さい。

ビューIDを確認する
ビューIDを確認する

ビューIDを確認して下さい。このIDを、後ほど利用します。

ライブラリの入手

いよいよ、プログラミングに取りかかっていきましょう。この辺でコーヒーでも持ってきて落ち着いて…。さて、Googleは、GitHubで公式ライブラリを公開しています。その中で、PHPのライブラリは下記ページにあります。右メニューにある「Download」から、ライブラリをダウンロードして下さい。

ダウンロードしたgoogle-api-php-client-master.zipを解凍して下さい。中には大量のファイルが含まれています。これらは、Googleが提供するAPIを全てフォローしたものです。読み込むファイルは、google-api-php-client-masterフォルダの直下にあるautoload.phpのみで大丈夫ですが、それ以外のファイルを外したり、配置変更しないでおいて下さいね。

ファイル構成

google-api-php-client-master
autoload.php

プログラミング

動作確認のための、単純なPHPを作成していきましょう。ページタイトル、ページのパス、そしてページビュー数を取得します。まずは、ライブラリを読み込みます。

PHP

<?php
	//ライブラリを読み込む
	require_once "./google-api-php-client-master/autoload.php";

続いて、プログラムに必要な各種キーを変数に代入します。クライアントIDの情報にある「メールアドレス」、そして、Google Analyticsで確認できる「ビューID」をセットして下さい。

PHP

//メールアドレス
$client_email = "388703791528-4usfjkghn454k2ivq24f8t34o3spf48s@developer.gserviceaccount.com";

//ビューID
$view_id = "86695217";

続いて、秘密キーファイルを読み込みます。秘密キーファイルを任意の場所にアップロードしておいて下さい。できればルート外(直接URLアドレスでアクセスできない)のフォルダに設置して、絶対パスで読み込みましょう。

PHP

//秘密キーファイルの読み込み
$private_key = @file_get_contents("/var/www/syncer.jp/private/Syncer_Analytics-208312d9d56b.p12");

3回目の続いて、です。データを取得するための、パラメータを、ライブラリのルールに従って、指定します。

PHP

//取得する期間
$from = "2014-11-10";		//対象開始日
$to = "2014-12-10";			//対象終了日

//取得するデータの組み合わせ
$dimensions = "ga:pageTitle, ga:pagePath, ga:date";	//ディメンションの設定[,で区切る]
$metrics = "ga:pageviews";	//メトリクス

//取得件数(最大1,000件)
$max_result = 10;

//オプション
$option = array(
	"dimensions" => $dimensions,
	"max-results" => $max_result,
	"sort" => "-ga:pageviews",
//	"start-index" => 50,	//オフセット値
);

取得する期間は、基本的にYYYY-MM-DDの形式で指定します。todayyesterday5daysAgoなどといった指定も可能ですが、あまり使う機会はなさそうです。

取得件数は最大で1,000件までです。ページが1,000件以上ある場合は、オプションとなる連想配列のstart-indexというキーにオフセット値を指定できます。その他、指定可能なオプションについては、公式ドキュメント(英語)をご参考下さい。

最も重要な取得するデータの組み合わせ。これは「ディメンション」と「メトリクス」という2つの項目を指定します。簡単に言うと、テーブルでいう「列」と「行」の関係だと考えて下さい。例えば、今回のサンプルでは、メトリクスに「ページビュー(ga:pageviews)」、ディメンションに「ページタイトル(ga:pageTitle)」「ページURL(ga:pagePath)」「日付(ga:date)」を指定しています。メトリクス、ディメンションに指定できる項目については、下記の公式ドキュメント(英語)を参考にして下さい。

下記は云々の処理を経て、取得したオブジェクトデータをJSON型に変換して、そのままブラウザに出力するものです。

PHP

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

//スコープのセット
$scopes = array("https://www.googleapis.com/auth/analytics.readonly");

//クレデンシャルの作成
$credentials = new Google_Auth_AssertionCredentials($client_email,$scopes,$private_key);

//Googleクライアントのインスタンスを作成
$client = new Google_Client();
$client->setAssertionCredentials($credentials);

//トークンのリフレッシュ
if($client->getAuth()->isAccessTokenExpired()){
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION["service_token"] = $client->getAccessToken();

//Analyticsのインスタンスを作成
$analytics = new Google_Service_Analytics($client);

//データの取得
$obj = $analytics->data_ga->get("ga:{$view_id}",$from,$to,$metrics,$option);

//JSONデータに変換して出力
echo json_encode($obj);

上記は、決まった処理なので解説は割愛します。公式のサンプルを参考にしたものなので、個々の箇所の解説を見たい場合は、GitHubのページをご参考下さい。

取得したデータをJSON型に変換した時の出力結果のサンプルが下記です。rowsプロパティ内に、取得した件数分が配列形式で含まれています。1つ1つのデータの内容は、ディメンションに設定した「ページタイトル(ga:pageTitle)」「ページURL(ga:pagePath)」「日付(ga:date)」に続き、最後にメトリクスに指定した「ページビュー(ga:pageviews)」という順番に格納されます。

JSON

{
	"containsSampledData": false,
	"id": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:86695217&dimensions=ga:pageTitle,+ga:pagePath,+ga:date&metrics=ga:pageviews&sort=-ga:pageviews&start-date=2014-11-10&end-date=2014-12-10&start-index=100&max-results=5",
	"itemsPerPage": 5,
	"kind": "analytics#gaData",
	"nextLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:86695217&dimensions=ga:pageTitle,+ga:pagePath,+ga:date&metrics=ga:pageviews&sort=-ga:pageviews&start-date=2014-11-10&end-date=2014-12-10&start-index=105&max-results=5",
	"previousLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:86695217&dimensions=ga:pageTitle,+ga:pagePath,+ga:date&metrics=ga:pageviews&sort=-ga:pageviews&start-date=2014-11-10&end-date=2014-12-10&start-index=95&max-results=5",
	"rows": [
		[
			"Instagramでユーザーをブロック(フォロワー外し)する方法",
			"/instagram-how-to-block-user",
			"20141205",
			"663"
		],
		[
			"Instagramを始めよう!アカウントを作成する方法",
			"/instagram-how-to-create-account",
			"20141129",
			"660"
		],
		[
			"Instagramで投稿写真を非公開に設定する方法",
			"/instagram-how-to-setting-private-mode",
			"20141129",
			"659"
		],
		[
			"Instagramでユーザーをブロック(フォロワー外し)する方法",
			"/instagram-how-to-block-user",
			"20141119",
			"658"
		],
		[
			"Instagramのダイレクトメッセージの使い方",
			"/instagram-how-to-use-direct-message",
			"20141111",
			"658"
		]
	],
	"sampleSize": null,
	"sampleSpace": null,
	"selfLink": "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:86695217&dimensions=ga:pageTitle,+ga:pagePath,+ga:date&metrics=ga:pageviews&sort=-ga:pageviews&start-date=2014-11-10&end-date=2014-12-10&start-index=100&max-results=5",
	"totalResults": 7224,
	"totalsForAllResults": {
		"ga:pageviews": "324049"
	}
}

APIリクエストの返り値の、各プロパティの解説は、公式ドキュメント(英語)をご参考下さい。

Response Fields

Google Developers

サンプルコード

冒頭で紹介したサンプルデモと、同じプログラムを配布します。各キーの値を変更して、ご利用下さい。

PHP

<?php
	//ライブラリを読み込む
	require_once "./google-api-php-client-master/autoload.php";

	//メールアドレス
	$client_email = '68........528-4usfjkgh.............f48s@developer.gserviceaccount.com';

	//ビューID
	$view_id = "82313114";

	//秘密キーファイルの読み込み
	$private_key = @file_get_contents('./google-api-php-client-master/Syncer_Analytics-205788d9d56a.p12');

	//取得する期間
	$from = date("Y-m-d",strtotime("-1 day"));		//対象開始日
	$to = date("Y-m-d",strtotime("-1 day"));			//対象終了日

	//取得するデータの組み合わせ
	$dimensions = "ga:pageTitle, ga:pagePath";	//ディメンションの設定[,で区切る]
	$metrics = "ga:pageviews";	//メトリクス

	//取得件数(最大1,000件)
	$max_result = 3;

	//オプション
	$option = array(
		"dimensions" => $dimensions,
		"max-results" => $max_result,
		"sort" => "-ga:pageviews",
	//	"start-index" => 50,	//オフセット値
	);

	//サービストークンのセット
	if(isset($_SESSION["service_token"])){
		$client->setAccessToken($_SESSION["service_token"]);
	}

	//スコープのセット
	$scopes = array("https://www.googleapis.com/auth/analytics.readonly");

	//クレデンシャルの作成
	$credentials = new Google_Auth_AssertionCredentials($client_email,$scopes,$private_key);

	//Googleクライアントのインスタンスを作成
	$client = new Google_Client();
	$client->setAssertionCredentials($credentials);

	//トークンのリフレッシュ
	if($client->getAuth()->isAccessTokenExpired()){
		$client->getAuth()->refreshTokenWithAssertion($cred);
	}
	$_SESSION["service_token"] = $client->getAccessToken();

	//Analyticsのインスタンスを作成
	$analytics = new Google_Service_Analytics($client);

	//データの取得
	$obj = $analytics->data_ga->get("ga:{$view_id}",$from,$to,$metrics,$option);

	//HTMLの作成
	$html = '';
	foreach($obj->rows as $item){
		$html .= '<li><a href="'.$item[1].'">'.$item[0].'</a> ('.number_format($item[2]).'pv)</li>';
	}

	//JSONデータに変換
	$json = json_encode($obj);

?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8"/>
		<meta name="robots" content="noindex,nofollow">
		<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
		<title>Google Analytics APIでページビュー数TOP5を取得するサンプルデモ</title>
		<style>
textarea{
	width:95%;
	height:300px;
}
		</style>
	</head>
<body>
<h1>Google Analytics APIでページビュー数TOP<?php echo $max_result ?>を取得するサンプルデモ</h1>
<p>Google Analytics APIを使って、このブログの昨日のページビュー数TOP<?php echo $max_result ?>を取得するサンプルデモです。</p>
<p>(解説:<a href="http://syncer.jp/google-analytics-api-tutorial" target="_blank" rel="nofollow">Syncer</a>)</p>

<h2><?php echo date("Y-m-d",strtotime("-1 day")) ?>のページビューTOP<?php echo $max_result ?></h2>
<ol>
<?php echo $html ?>
</ol>

<h2>取得したJSONデータ</h2>
<textarea><?php echo $json ?></textarea>

</body>
</html>

記事の更新履歴

2014-12-05
記事を公開しました。