本文へジャンプ

Google Analytics API:アカウント認証からPHPでPageViewsを取得するまで

Posted by mio.satoh

「ブログ記事のPVランキングを週別で集計したい!」
「ブラウザ・デバイスごとのPVを集計したい!」

例えばこんなご要望。Analyticsのページを見ればかんたんに分かりますが、さらに取得したランキングをサイトに載せたいという場合もあったりします。
そんな時はAnalytics APIの出番です。
導入こそちょっと面倒なところがありますが、一度クリアしてしまえばプログラム自体はお手軽に実装できます。

以下にご説明する内容は基本的には公式ドキュメントに書かれていることですが、ページの行き来などで分かりづらい部分があるので、スクリーンショットを交えて分かりやすく説明します。

なお、注意点として、Analytics APIの仕様は今までも何度かアップデートされており、ここに書かれている情報が古くなる可能性や、ネットでググった別の情報がこの記事より古くて内容が合わない場合もあります。

STEP:1 認証情報の登録

API Consoleの設定

まずはGoogle API Consoleにログインします。

図1 - API Consoleの設定

左のメニューから「認証情報」に移動します。
「サービスアカウントキー」の右肩にある「サービスアカウントの管理」をクリックします。

図2 - API Consoleの設定

サービスアカウントの管理に移動したら、上部の「サービスアカウントを作成」をクリックします。

図3 - API Consoleの設定

モーダルウィンドウが立ち上がるので、サービスアカウントの情報を入力します。

「アカウント名」と「アカウントID」は任意の文字列でOKです。

「新しい秘密鍵の提供」にチェックを入れ、その下の「キーのタイプ」は「P12」を選択します。

さらにその下の「〜委任を有効にする」チェックボックスもチェック。
入力が完了したら「作成」ボタンをクリックします。

モーダルが閉じると同時に".p12"という拡張子の認証鍵ファイルが自動ダウンロードされるはずです。
これは後ほど必要になるので、とりあえず大事に保管しておきましょう。

図4 - API Consoleの設定

サービスアカウントの管理画面に戻ると、今登録したアカウントが一番下に追加されています。
そのアカウント情報の、「サービスアカウントID」列の文字列(foo@bar.iam.gserviceaccount.comといった形式のもの)をコピーしておきます。

Analyticsの設定

次にAnalytics側の設定画面に移動します。

図1 - Analyticsの設定

左上プルダウンで該当のプロパティを選択した上で、「ユーザー管理」を選択します。

「権限を付与するユーザー」に先程コピーしたアカウントIDをメールアドレスとして登録します。

メールアドレス入力欄の横にあるプルダウンはどこまでのアクセス権限が求められるかによって変わりますが、情報の取得だけなら「表示と分析」のままで問題ありません。

「追加」ボタンをクリックすれば、登録したサービスアカウントがAnalyticsAPIへの接続権限をゲットです。

STEP:2 PHPライブラリの入手

公式のPHPライブラリファイルは、git cloneするかGitHubからダウンロードします。

git clone -b v1-master https://github.com/google/google-api-php-client.git

入手したファイルをディレクトリごとPHPプログラムを設置するサーバディレクトリの配下にアップロードします。

さらに、このディレクトリと並列に、STEP:1で保管しておいた.p12ファイルをアップロードしておきます。
これでやっと、Analytics APIにアクセスしてあんなことやこんなことをする準備が整いました

STEP:3 サンプルプログラムの実行

STEP:2でライブラリ一式や.p12ファイルを置いたディレクトリに、analytics.phpというサンプルプログラムを設置してみましょう。

公式ドキュメントに親切なサンプルコードが紹介されています。

function getService()
{
// Creates and returns the Analytics service object.
// Load the Google API PHP Client Library.
require_once 'google-api-php-client/src/Google/autoload.php';
// Use the developers console and replace the values with your
// service account email, and relative location of your key file.
$service_account_email = '<Replace with your service account email address.>';
$key_file_location = '<Replace with /path/to/generated/client_secrets.p12>';
// Create and configure a new client object.
$client = new Google_Client();
$client->setApplicationName("HelloAnalytics");
$analytics = new Google_Service_Analytics($client);
// Read the generated client_secrets.p12 key.
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_email,
array(Google_Service_Analytics::ANALYTICS_READONLY),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
return $analytics;
}
function getFirstprofileId(&$analytics) {
// Get the user's first view (profile) ID.
// Get the list of accounts for the authorized user.
$accounts = $analytics->management_accounts->listManagementAccounts();
if (count($accounts->getItems()) > 0) {
$items = $accounts->getItems();
$firstAccountId = $items[0]->getId();
// Get the list of properties for the authorized user.
$properties = $analytics->management_webproperties
->listManagementWebproperties($firstAccountId);
if (count($properties->getItems()) > 0) {
$items = $properties->getItems();
$firstPropertyId = $items[0]->getId();
// Get the list of views (profiles) for the authorized user.
$profiles = $analytics->management_profiles
->listManagementProfiles($firstAccountId, $firstPropertyId);
if (count($profiles->getItems()) > 0) {
$items = $profiles->getItems();
// Return the first view (profile) ID.
return $items[0]->getId();
} else {
throw new Exception('No views (profiles) found for this user.');
}
} else {
throw new Exception('No properties found for this user.');
}
} else {
throw new Exception('No accounts found for this user.');
}
}
function getResults(&$analytics, $profileId) {
// Calls the Core Reporting API and queries for the number of sessions
// for the last seven days.
 return $analytics->data_ga->get(
 'ga:' . $profileId,
 '7daysAgo',
 'today',
 'ga:sessions');
}
function printResults(&$results) {
// Parses the response from the Core Reporting API and prints
// the profile name and total sessions.
if (count($results->getRows()) > 0) {
// Get the profile name.
$profileName = $results->getProfileInfo()->getProfileName();
// Get the entry for the first entry in the first row.
$rows = $results->getRows();
$sessions = $rows[0][0];
// Print the results.
print "First view (profile) found: $profileName\n";
print "Total sessions: $sessions\n";
} else {
print "No results found.\n";
}
}
$analytics = getService();
$profile = getFirstProfileId($analytics);
$results = getResults($analytics, $profile);
printResults($results);

6行目のrequire_onceのところを、設置したライブラリのパスに応じて書き換えます。

8行目の$service_account_emailの中身はSTEP:1,2で登場したアカウントID(メールアドレス)を入力します。

次の行の$key_file_locationにはアップロードした.p12ファイルのパスを入力。

すべてうまく行っていれば、このanalytics.phpを実行すると過去7日間のサイト全体のPV数が表示されるはずです。
あとは60行目の部分の引数に色々な条件を設定すれば、ディレクトリやページごとのPVランキングなど、様々な情報にアクセスできます。

引数の設定については公式リファレンスとにらめっこになりますが、これまた設定方法が少し難解な部分があるので、また別の機会にでも。

Recent Entries
MD EVENT REPORT
What's Hot?