読者です 読者をやめる 読者になる 読者になる

UNIX的なアレ

UNIX的なこととかいろいろ

CakePHPからGoogle Analytics APIを使う方法

PHP CakePHP

nanapiのシステムで一部使う必要があったので、ちょっとチャレンジしてみました。
Google Analytics API
ってちょっと面倒そうなイメージがあったので今まで敬遠していたのですが、まぁそうも言っていられなかったわけです。日本語ドキュメントがあると嬉しかったのですが、あんまり良質なのがないので本家を頑張って読み解きました。

ライブラリを利用する

まぁいくつかライブラリはあるわけですが、PHPは公式のライブラリが用意されていません。
ただ、公式のヘルプに紹介してあるものがあったのでこちらを利用しました。画面下部にある、PHP5 OOP Interfaceというやつです。
Core Reporting API Client Libraries & Sample Code - Google Analytics — Google Developers

使う前に取得しておくべきもの

Google Analytics APIは認証に3つのパラメータが必要になります。

  • emailアドレス (analyticsの認証設定がされているもの」)
  • パスワード (上記のパスワード)
  • profile id (後述)

profile idは下記の画面から取得することができます。

profile id を取得する


対象となるレポートの編集をクリック。


画面上部に表示されるものがprofile idです。

普通にPHPから使ってみる

まず、CakePHPからではなく普通にPHPから使ってみましょう。まぁこれはサンプルどおりでいけますね。PageviewとVisitorを取得してみましょう。

<?php
define('ga_email','youremail@email.com');
define('ga_password','your password');
define('ga_profile_id','your profile id');

require 'gapi.class.php';
$ga = new gapi(ga_email,ga_password);
$ga->requestReportData(
  ga_profile_id,
  array('browser','browserVersion'), // ブラウザとブラウザのバージョン単位でデータを取得します
  array('pageviews','visits') // 取得するデータは、pageviewとvisitsを取得します
);
?>

array(30) {
  [0]=>
  object(gapiReportEntry)#7 (2) {
    ["metrics:private"]=>
    array(2) {
      ["pageviews"]=>
      int(1)
      ["visits"]=>
      int(1)
    }
    ["dimensions:private"]=>
    array(2) {
      ["browser"]=>
      string(16) "Ask Jeeves/Teoma"
      ["browserVersion"]=>
      string(9) "(not set)"
    }
  }
}

実行すると上記のような結果が返ってきます。上記の例はブラウザとブラウザのバージョン単位で取得しています。次は日付単位で取得してみましょう。

<?php
define('ga_email','youremail@email.com');
define('ga_password','your password');
define('ga_profile_id','your profile id');

require 'gapi.class.php';

$ga = new gapi(ga_email,ga_password);
$ga->requestReportData(ga_profile_id,
		       array('date'), // 日付ごとにデータを取得します
		       array('pageviews','visits'), // pageviewとvistisを取得します
		       null, // ソート条件
		       null, // filter条件
		       '2010-01-01', //開始日
		       '2010-01-31' // 終了日
		       );

var_dump($ga->getResults());
?>

array(7) {
  [0]=>
  object(gapiReportEntry)#7 (2) {
    ["metrics:private"]=>
    array(2) {
      ["pageviews"]=>
      int(51097)
      ["visits"]=>
      int(18795)
    }
    ["dimensions:private"]=>
    array(1) {
      ["date"]=>
      string(8) "20100501"
    }
  }
  [1]=>
  object(gapiReportEntry)#12 (2) {
    ["metrics:private"]=>
    array(2) {
      ["pageviews"]=>
      int(51615)
      ["visits"]=>
      int(19775)
    }
    ["dimensions:private"]=>
    array(1) {
      ["date"]=>
      string(8) "20100502"
    }
  }
}

このようにすることで日付単位で、pageviewsやvistsの取得を行うことができます。これはレポートとかに使うことがありそうですね。
その他にも、filterでページを指定することや、sort条件をつけることも可能です。なれるまでコツがいりますが、一旦なれてしまうと比較的らくに取得できるようになります。
フィルタなどの条件の詳細の指定方法は下記のドキュメントに記載されています。
GAPIDocumentation - gapi-google-analytics-php-interface - GAPI - Google Analytics API PHP Interface - Google Project Hosting

cakephpから利用する

さて、最後にcakephpから利用しましょう。といってもApp::importするだけでらくに使えます。
まずは、vendorの下にライブラリをおきましょう。下記の場所に配置してください。

$CAKE_ROOT/app/vendors/gapi/gapi.class.php

上記の様に配置したら、あとは動かすだけです。

<?php
App::import('Vendor','gapi',array('file'=>'gapi'.DS.'gapi.class.php'));

class GoogleAnalyticsController extends AppController {
  var $name = 'GoogleAnaytics';
  var $uses = false ; 

  function index(){
    $ga_email = 'sample@gmail.com';
    $ga_password = 'password';
    $ga_profile_id = 'profile_id';

    $ga = new gapi($ga_email,$ga_password);
    $ga->requestReportData(
			   $ga_profile_id,
			   array('date'),
			   array('pageviews','visits'),
			   array('date'), 
			   $filter ,
			   $start_date ,
			   $end_date );
    debug( $ga->getResults() );
  }
}

と、まぁこんな感じで取得できます。注意事項としては、結構重いAPIなので、同じ条件で頻繁に絞り込む時はCacheするのが良いでしょうね。
他にもいくつかライブラリはあるようなので興味ある方はチャレンジしてみてください。

もうちょっと簡単に取得できるライブラリがほしいところですねぇ。作ろうかな・・・