Rainmeterを使ってGoogle Analyticsのアクセス解析データをデスクトップに表示してみた

Google Analytics Rainmeter

※当ブログではアフィリエイト広告を利用しています。

Google Analyticsのアクセス解析データはサイト管理者やブロガーの方であれば常に気になると思います。私も暇さえあればAnalyticsを見ています。

そこでデスクトップカスタマイズツールのRainmeterとGoogle Analytics APIを使って、アクセス解析データをWindowsのデスクトップに表示してみたのでご紹介します。すぐ使えるサンプルプログラムもダウンロードできます。

こんなものを作りました

実際にGoogle Analyticsのデータをデスクトップ表示している画面は以下の通りです。画面右下あたりに表示されています。
Rainmeterを使ってGoogle Analyticsデータをデスクトップ表示

各種データはRainmeterのスキンで表示しています。リアルタイムアクティブユーザ数や当日のPV数などの情報を表示しており、数字は30秒毎に自動的に最新の情報に更新されます。気になるリアルタイムアクティブユーザ数も常に見ていることができます。

実現のために作ったのは以下のようなものです。

  • Google Analytics各種データをJSONで返すPHPスクリプト
  • JSONデータをRainmeterで表示するためのスキン

少し準備が必要ですが成果物を本エントリでダウンロード可能です。以下に導入方法を記載しますので興味のある方は使ってみてください。

前提条件

前提として以下の環境が必要です。

  • Windws Vista または 7 または 8のPC
  • デスクトップカスタマイズツールのRainmeterがインストール済みであること
  • PHPが動作するサーバー
  • Google Analytics APIをPHPから使える状態になっていること

Rainmeterはこちらのサイトからダウンロード可能です。今回使ったバージョンは3.1(r2290)です。またテーマはEnigma Basicを使用しました。(たぶん他のテーマでも動くと思いますが動作未確認です)

またGoogle AnalyticsのデータをAPIで取得する方法については事前準備とデータ取得それぞれについて、以下のエントリでご紹介していますので参考にしてみて下さい。

Google Analyticsデータを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';

date_default_timezone_set('Asia/Tokyo');

// サービスアカウント名(メールアドレス)
$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_realtime = $analytics->data_realtime->get(
            $analytics_view_id, // アナリティクスのビューID(アナリティクス設定 -> ビュー -> ビュー設定から確認)
            'rt:activeUsers'  // リアルタイムアクティブユーザー数を取得
    );

    // リアルタイムアクティブユーザ数を取得
    $totals_realtime = $results_realtime->getTotalsForAllResults();
    
    $start_date = date("Y-m-d");	// 開始日付(YYYY-MM-DD)
    $end_date = date("Y-m-d");		// 終了日付(YYYY-MM-DD)
    // 取得するメトリクス(カンマ区切り)
    // ページビュー、ユーザ、セッション、平均セッション時間、直帰率、ページ/セッション、新規セッション率
    $metrics = 'ga:pageviews,ga:users,ga:sessions,ga:avgSessionDuration,ga:bounceRate,ga:pageviewsPerSession,ga:percentNewSessions';
    
    //ユーザーサマリーデータを取得
    $results_ga = $analytics->data_ga->get(
        $analytics_view_id, $start_date, $end_date, $metrics
    );
                
    $totals_ga = $results_ga->getTotalsForAllResults();
    
    // リアルタイムユーザ数とユーザーサマリーをKeyValue形式にする
    $array = array(
        "activeUsers" => $totals_realtime["rt:activeUsers"],
        "pageviews" => $totals_ga["ga:pageviews"],
        "users" => $totals_ga["ga:users"],
        "sessions" => $totals_ga["ga:sessions"],
        "avgSessionDuration" => gmdate("H:i:s", $totals_ga["ga:avgSessionDuration"]),
        "bounceRate" => number_format($totals_ga["ga:bounceRate"], 2)."%" ,
        "pageviewsPerSession" => strval(round($totals_ga["ga:pageviewsPerSession"], 2)),
        "percentNewSessions" => number_format($totals_ga["ga:percentNewSessions"], 2)."%" 
    );

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

実行するとGoogle Analyticsの各種データが以下のようにJSON形式で返ってきます。

{
    "activeUsers": "6", 
    "avgSessionDuration": "00:01:21", 
    "bounceRate": "82.23%", 
    "pageviews": "1369", 
    "pageviewsPerSession": "1.35", 
    "percentNewSessions": "76.51%", 
    "sessions": "1013", 
    "users": "934"
}

JSONデータをRainmeterで表示するためのスキンの準備

Google AnalyticsデータをRainmeterで表示するためのスキンを準備します。今回作成したAnalyticsスキンはこちら Analytics_RainmeterSkin.zip(1.84KB) からダウンロード可能ですのでお使いください。

準備としてRainmeterのスキンディレクトリへの配置と、JSONデータを返すスクリプトのURL設定が必要です。

Rainmeterのスキンディレクトリへの配置

ダウンロードしたスキンをRainmeterのスキンディレクトリにコピーします。今回は作成したのはEnigmaテーマのサイドバーのウィジェットのため、以下のディレクトリに配置します。

C:\Users\[ユーザー名]\Documents\Rainmeter\Skins\Enigma\Sidebar

Rainmeter Analyticsスキン配置ディレクトリ

JSONデータを返すスクリプトのURL設定

Analyticsスキンフォルダの中のAnalytics.incをテキストエディタ等で開きます。

[MeasureJSON]セクションのURLの部分を、Google AnalyticsのデータをJSONで返すPHPスクリプトのURLに変更し、上書き保存します。
Rainmeter Analytics JSON URL設定

スキンの読み込み

設定完了したらスキンを読み込みます。

タスクバーのRainmeterアイコンを右クリック→管理ツールを開きます。
Rainmeter 管理ツール
管理ツールで左下の「すべて再読み込み」を押した後、「Enigma」→「Sidebar」→「Analytics」→「Analytics.ini」を選択し、「読み込む」ボタンを押します。
Rainmeter 管理ツールからの読み込み
スキンが読み込まれ、JSONで取得したGoogle Analyticsのデータが表示されます。
Rainmeter Analytics表示

もし表示されない場合はPHPスクリプトでJSONが正しく表示されるかや、APIの制限(50,000リクエスト/日、10リクエスト/秒)を超えていないかを確認してみてください。

ちなみにスキンで実施しているのは以下のような動作です。

  • 指定されたURLからJSONデータを取得する
  • 取得したJSONデータをRainmeterのWebParserプラグインでパースし、データを表示する
  • 30秒ごとに最新のデータを取得し、画面描画をリロードする

参考にした資料

Rainmeterスキン作成とGoogle Analytics各種データ取得にあたり以下の資料を参考にしました。

RainmeterでのJSONデータのパースが課題だったのですが、Rainmeter公式フォーラムに投稿されていた回答のおかげでWebParserプラグインと正規表現によりパースできることがわかったため実装できました。

おわりに

スキンを切り替えることで異なるJSONを読みに行くようにすれば異なる期間のデータを表示したり、現在アクティブなページ等の他の項目を表示することもできそうです。

様々なサービスで提供されているAPIとRainmeterを使うことで他にもあらゆるデータをデスクトップに表示できそうですね。