まだ全然アクセス数が無いので、さほど意味のない機能ですが、
バズってるタイミングはみんなすぐに知りたいもの。
ということでこちらのサイトを参考にさせて頂きました。
http://www.lancork.net/2014/08/google-analytics-api-php-first/
参考先ではページアクセスでリアルタイム数が見れるということでしたが、
それではGoogleAnalytics見ているのと変わらないので、
5分毎にリアルタイムユーザー数をチェックし、ある閾値を越えたらメールで受け取れるように改修しました。
また、今はフリーのサーバーを使っている関係で、
- cronが使えない
- phpのバージョンが変えられない
という問題もあったので、その部分も踏まえて解説します。
フリーのサーバーであっても、
- PHPが使える
- FTPが使える
- 任意の場所にファイルがおける権限がある
- ディレクトリ構造がわかっている
ことが前提です。
GoogleAnalyticsAPIの設定
まずGoogleAnalyticsからデータを取得するために、APIを使用できるようにする必要があります。
初めて使う場合は左メニューの「プロジェクト」を選択し、「プロジェクト作成」ボタンを押します。
プロジェクト名は任意のものを設定し、「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サービスを使用。
URLを定期的に叩くというだけですが、これがなかったら途方にくれていた・・・
ここで会員登録をした後、管理画面に移動し左上の「+ free cron add」を選択。
URさきほどアクセスできるようにした、「http://サイトのurl/fetchactiveuser.php」を設定。
Execution periodを5minutesに設定。
StatusをActiveに変更。
Saveを押したら完了です。
地味に色んな所でハマったせいで疲れました・・・
今回は器用貧乏なところがなにも活躍できず、参考サイトの恩恵ばかりです。
せっかく今回とFreeWebCronに出会えたので時間があればそこら辺も活用したいかなと。
GmailとかGoogleDriveとかYoutubeとかもあったので数が多すぎて見きれなかった・・・
以上!切ない。
