Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(実践編)

Google Analytics API PHP eyecatch

事前準備編ではGoogle Analytics APIを使うために必要な情報を準備しました。

実践編では実際にPHPからGoogle Analyticsのリアルタイムアクティブユーザー数を取得してみます。コピペで使えるコードもあります。

はじめに

本エントリではGoogle Analytics APIを使ってPHPからウェブサイトのリアルタイムアクティブユーザー数の取得をプログラムで実践します。事前準備編の準備ができていることが前提となります。

前回エントリ:Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(事前準備編)

Google APIs Client Library for PHPの準備

PHPからAPIを使うため、クライアントライブラリを準備します。ライブラリはComposerからインストールするか、GitHubからソースをダウンロードします。今回はGitHubからコピーする方法で準備します。

関連ページ:Installation – Google APIs Client Library for PHP — Google Developers

GitHubのプロジェクトページの下記の場所からダウンロードします。
Google APIs Client Library for PHP ダウンロード

または下記コマンドでgit cloneします。

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

コピーしたファイルは以下のような構成になっています。実際に使用するのはsrcフォルダの中身だけです。
Google APIs Client Library for PHP 構成

Google Analyticsのリアルタイムユーザー数をPHPで取得するサンプル

ようやくプログラムの出番です。まずリアルタイムユーザ数取得用のPHPを任意の名前(fetchactiveuser.phpなど)で作成し、クライアントライブラリのsrcフォルダおよび準備編で準備した*.p12ファイルと同じ階層に配置します。階層はコード中で指定しているものと同じになれば変わってもOKです。
リアルタイム数取得プログラム配置

以下はリアルタイムユーザー数をPHPで取得し、JSON形式で返すサンプルコードです。サービスアカウント名、P12キーファイルのパス、アナリティクスビューIDは準備編で用意した自分のものに置き換えます。

<?php
/**
 * Google Analyticsのリアルタイムユーザ数を取得しJSONで返却
 */
set_include_path("./src/" . PATH_SEPARATOR . get_include_path());

require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';

// サービスアカウント名(メールアドレス)
$service_account_name = 'YOUR_MAIL_ADDRESS@developer.gserviceaccount.com';
// P12キーファイルのパス
$key_file_location = './YOUR_KEY_FILE.p12';
// アナリティクスのビューID 例)'ga:1234567'
$analytics_view_id = 'ga:1234567';

session_start();

if ( !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
}

$client = new Google_Client();

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}

$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/analytics'),
    $key
);
$client->setAssertionCredentials($cred);

if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}

$_SESSION['service_token'] = $client->getAccessToken();

// アナリティクスクライアントを生成
$analytics = new Google_Service_Analytics($client);

try {
	// リアルタイムデータを取得する
    $results = $analytics->data_realtime->get(
            $analytics_view_id, // アナリティクスのビューID(アナリティクス設定 -> ビュー -> ビュー設定から確認)
            'rt:activeUsers'  // リアルタイムアクティブユーザー数を取得
    );

    // 取得結果からリアルタイムアクティブユーザ数を取り出す
    $totals = $results->getTotalsForAllResults();
    // activeUsers:ユーザ数 の配列に加工
    $array = array("activeUsers" => $totals["rt:activeUsers"]);

    // JSONに変換して表示
    header("Content-Type: application/json; charset=utf-8");
    header('Access-Control-Allow-Origin: *');
    echo json_encode($array);
    
} catch (apiServiceException $e) {
    echo $e->getMessage();
}

プログラムを実行すると以下のようにJSON形式でリアルタイムアクティブユーザ数が返されます。

{"activeUsers":"10"}

ほぼ同時刻のGoogle AnalyticsのWeb画面とAPIを使ったプログラム実行結果の比較です。アクティブユーザ数が同じであることが確認できます。Analytics 画面とAPI利用結果の比較

コード中では認証情報をもとにGoogleアナリティクスのクライアントを生成し、ビューIDとメトリクスrt:activeUsersを指定してReal Time Reporting API(v3)のgetメソッドを使ってリアルタイムアクティブユーザ数を取得しています。メソッドの詳細な使い方は公式のAPIドキュメントが参考になります。

公式ドキュメント:Real Time Data: get – Google Analytics — Google Developers

おわりに

今回はリアルタイムユーザのみを取得しましたが、APIを使えばGoogle Analyticsの他の値も簡単にプログラムから取得することが可能です。

準備が少し大変ですが、JSONやXMLで値を返せるようにしておけば様々なシーンで利用ができそうです。