GoogleAnalytictsのリアルタイムユーザー数をメールで受け取る

スクリーンショット 2015-03-18 21.54.00

まだ全然アクセス数が無いので、さほど意味のない機能ですが、

バズってるタイミングはみんなすぐに知りたいもの。

ということでこちらのサイトを参考にさせて頂きました。
http://www.lancork.net/2014/08/google-analytics-api-php-first/

参考先ではページアクセスでリアルタイム数が見れるということでしたが、
それではGoogleAnalytics見ているのと変わらないので、
5分毎にリアルタイムユーザー数をチェックし、ある閾値を越えたらメールで受け取れるように改修しました。

また、今はフリーのサーバーを使っている関係で、

  • cronが使えない
  • phpのバージョンが変えられない

という問題もあったので、その部分も踏まえて解説します。

フリーのサーバーであっても、

  • PHPが使える
  • FTPが使える
  • 任意の場所にファイルがおける権限がある
  • ディレクトリ構造がわかっている

ことが前提です。

GoogleAnalyticsAPIの設定

まずGoogleAnalyticsからデータを取得するために、APIを使用できるようにする必要があります。

Google Developers Console

初めて使う場合は左メニューの「プロジェクト」を選択し、「プロジェクト作成」ボタンを押します。

プロジェクト名は任意のものを設定し、「OK」ボタンを選択
(プロジェクトIDが気に入らなければ入力ボックス右にある更新ボタンを押す。ランダム生成であるため指定はできない)

ネット環境が悪かったか何度かエラーに成ってしまったが、根気よくやればうまくいきます。

プロジェクトが作成できたら、Google AnalyticsのAPIを有効化するため、左メニューの「APIと認証」>「API」を選択します。

「Analytics API」となっているので気をつけてください。
なお、50000request/dayとなっているので、連続で呼び出す処理を施す場合は要注意です。
今回は5分毎なので行っても12request/hour⇒288request/dayで余裕ですね。

有効化したら、認証情報を取得します。

左メニューの「APIと認証」>「認証情報」を選択します。

リクエストごとに認証が発生しないようにするため「OAuth2.0」を使います。
「新しいクライアントIDを作成」ボタンを押します。

3つ選択肢が有りますが、迷わずサービスアカウントをチェック。

作成するとJSONファイルのダウンロードが行われますが、今回はそれではなく、p12の証明書ファイルを使用します。

「新しいP12キーを生成」ボタンを押してp12証明書ファイルをダウンロードします。

クライアントIDとクライアントメールアドレスが同じページに表示されていると思いますが、
メールアドレスの方を使用します。

GoogleAnalyticsの設定

さきほど生成されたクライアントメールアドレスを使って、GoogleAnalyticsに要求をかけるため、
Google Analyticsの「アナリティクス設定」からユーザー登録を行います。
自分はここがよく分かってなかったため、すっ飛ばしていまし認証エラーでハマりました・・・

「ユーザー管理」からクライアントメールアドレスを追加します。

あとは監視したいビューのIDをメモります。

GoogleDeveloperConsoleよりやること少なくて安心。

サーバーサイドの設定

上記まででAPIを使用するための前準備ができたわけですが、ここから自分ち(サーバー)の設定を行います。

まずAPIを簡単に使用するため、googleが出しているモジュールをダウンロード。
Google APIs Client Library for PHP
必要なものは「src」フォルダのみです。

そしてAPIを使用するためのプログラムを作成。
ベースは参考サイトのものを使用しました。
fetchactiveuser.php

/**
* Google Analyticsのリアルタイムユーザ数を取得しJSONで返却
*/
set_include_path("./src/" . PATH_SEPARATOR . get_include_path());
//Service classをロードするために追加
require_once 'Google/autoload.php';
require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';

// サービスアカウント名(メールアドレス)
$service_account_name = 'xxx@developer.gserviceaccount.com';
// P12キーファイルのパス
$key_file_location = dirname(__FILE__).'/xxx.p12';
// アナリティクスのビューID 例)'ga:1234567'
$analytics_view_id = 'ga:nnnnnnn';
//メールを送る閾値
$threshold = nnnnn;

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();
$activusers = $totals["rt:activeUsers"];
if ( $activusers > $threshold ) {
// 通知先
if(mail('xxx@example.com', "Realtime over threshold : [$activusers] Users.", print_r($totals,true))) {
echo "success send mail";
} else {
echo "faild send mail";
}
}

// JSONに変換して表示
header("Content-Type: application/json; charset=utf-8");
header('Access-Control-Allow-Origin: *');
echo json_encode($activusers);

} catch (apiServiceException $e) {
echo $e->getMessage();
}

PHPのバージョンによってはうまくクラスが読み込めないようなので、以下の1文を追加

require_once 'Google/autoload.php';

では、必要な物は揃ったので以下の構成でファイルをアップロード

  • src (Google APIs Client Library for PHP)
  • fetchactiveuser.php
  • p12証明書

配置はどこでもいいですが、ページアクセスできるDocumentRootに配置しました。

これで問題なければ、http://サイトのurl/fetchactiveuser.phpにアクセスすると現在のリアルタイムユーザー数が表示されるかと思います。

さらに定期的にチェックしてメールを送るため、以下のwebサービスを使用します。
cronが使える方はfetchactiveuser.phpを定期的に呼び出すように設定すればいいだけです。

cronの設定

今回はcronが使えないということで、以下のwebサービスを使用。

Free Web Cron Service

URLを定期的に叩くというだけですが、これがなかったら途方にくれていた・・・

ここで会員登録をした後、管理画面に移動し左上の「+ free cron add」を選択。

URさきほどアクセスできるようにした、「http://サイトのurl/fetchactiveuser.php」を設定。
Execution periodを5minutesに設定。
StatusをActiveに変更。

Saveを押したら完了です。

地味に色んな所でハマったせいで疲れました・・・

今回は器用貧乏なところがなにも活躍できず、参考サイトの恩恵ばかりです。

せっかく今回とFreeWebCronに出会えたので時間があればそこら辺も活用したいかなと。
GmailとかGoogleDriveとかYoutubeとかもあったので数が多すぎて見きれなかった・・・

以上!切ない。

このエントリーをはてなブックマークに追加