【解説】GoogleAnalyticsのリアルタイムデータログを取得する方法

Google Analyticsには「リアルタイム」というメニューがあります。 その名の通りいま現状サイトに訪問しているユーザーのデータを見られる機能ですが、それとは別にリアルタイムデータログを取る方法について今回は解説します。

今回の概要

今回は「分単位でのアクティブユーザーログをとる」ことができるようにしてみます。

具体的には、GoogleAppsScript(Googleが提供しているAPI)を利用して、Googleドキュメントのスプレッドシートにアクティブユーザー数を一定期間に取得してみよう、という内容です。

参考:Realtime API

必要なものを揃える

事前に用意しておく必要のあるものは以下の2つだけです。

Googleアカウント
データを得る対象のAnalyticsを所有しているものに限ります。
データを取得する対象のGoogleAnalyticsのビューID
GoogleAnalyticsのアナリティクス設定>ビュー設定で確認出来る、8ケタの数字です。

当然ながら、取得できるのは上記のGoogleアカウントが所有しているデータに限定されます。 今回は、仮にビューIDを’01234567’とします。

データ取得前の準備

(1)Googleドキュメントのスプレッドシートを新規作成

(2)メニューからツール→スクリプトエディタを起動

メニューからツール→スクリプトエディタを起動します。

(3)「スクリプトを作成」から「空のプロジェクト」を選択

(4)リソース→「Googleの拡張サービス」から必要なライブラリ―今回は「Analytics API」―を有効化

リソース→「Googleの拡張サービス」から必要なライブラリ―今回は「Analytics API」―を有効化

Google デベロッパーコンソールでも有効化します(重要)。

※利用規約の更新に同意するか否かの確認がある場合は「同意する」を選択しましょう。

(5)スクリプトエディタにスクリプトを記述していきます。

データ出力をテスト

問題なく動作するか、まずはアクティブユーザー数を取得して出力してみます。 実行の際Analyticsへのアクセス許可を確認されるので、承認して実行しましょう。

function getRalTimeData() {
   //ログを取得
	Logger.log(Analytics.Data.Realtime.get('ga:01234567', 'rt:activeUsers').getRows());
	//出力先のシートを指定
	var sheet = SpreadsheetApp.getActiveSheet();
	//出力
	sheet.getRange(1, 1).setValue(Logger.getLog());
}

出力結果例:

A
1 Fri Mar 13 00:00:00 PDT 2015 INFO: [[12345]]

※アクティブユーザー数が12345人の場合

この状態だと後でグラフ化などしづらいですね。

加工しやすいデータ形式で出力する

今度は、日時とユーザーを別の列に出力してみます。

function getRalTimeData() {
    //アクティブユーザー数を取得
    var realTimeActiveUsers=Analytics.Data.Realtime.get('ga: 01234567', 'rt:activeUsers').getRows();
    //現在の日時取得(JSTで)
    var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd'T'HH:mm:ss ");
    //出力先のシートを指定
    var sheet = SpreadsheetApp.getActiveSheet();

    //出力
    sheet.getRange(1, 1).setValue(formattedDate);
    sheet.getRange(1, 2).setValue(realTimeActiveUsers);
}

出力結果例:

A B
1 2015-03-13T00:00:00 12345

定期的にデータを取得する

時間別推移をグラフにも整形できるよう、これを定期実行してデータを取得します。 連続出力できるように出力先の行番号を変更します。

function getRalTimeData() {
    //アクティブユーザー数を取得
    var realTimeActiveUsers=Analytics.Data.Realtime.get('ga: 01234567', 'rt:activeUsers').getRows();
    //現在の日時取得(JSTで)
    var formattedDate = Utilities.formatDate(new Date(), "JST", " HH:mm:ss ");
    //出力先のシートを指定
    var sheet = SpreadsheetApp.getActiveSheet();
    
    //最後に出力した行を取得
    var lastRow = sheet.getLastRow();
    //次の行に出力
    sheet.getRange(lastRow+1, 1).setValue(formattedDate);
    sheet.getRange(lastRow+1, 2).setValue(realTimeActiveUsers);
}

そして時計マークのアイコン「現在のプロジェクトのトリガー」から実行周期を設定します。

時計マークのアイコン「現在のプロジェクトのトリガー」から実行周期を設定します。

今回は定期実行したいので「時間主導型」「分タイマー」「1分ごと」に設定しました。

出力結果例:

A B
1 00:00:00 12345
2 00:01:00 12346
3 00:02:00 12347

これでアクティブユーザー数の分単位の推移が見られるようになりました。 自分でサーバを用意しなくても定期実行されるのがありがたいですね。

※今回使用したID,アクティブユーザー数は架空のものです。

ちなみに当社は広告の「配信システム」という、平たく言えば”AdWordsのような広告の配信ネットワークを構築するためのシステム”を提供しています。 総合広告配信システム「admage®」 こういったシステムにご興味がございましたら、ぜひお問い合わせを!