add to hatena hatena.comment (43) add to del.icio.us (0) add to livedoor.clip (2) add to Yahoo!Bookmark (0) Total: 45

Google Analytics APIを使ったアクセスランキング表示

Google Analyticsを導入するという選択肢はとても一般的なものになりました。
多くのサイトではGoogle Analyticsタグを記述し、管理画面に入り日々にらめっこしている管理者の方も多いと思います。
このように、ユーザーのアクセス数や動向を確認することができるのがGoogle Analyticsの一番の特徴ですが、それ以外にもAPIを使うと簡単に実装できることがあります。
その1つとして「Google Analytics APIを使ってアクセスランキング数を表示する」方法について紹介したいと思います。

アクセス数とは?

アクセス数を表示したい場合にどういった方法があるでしょうか?
たとえば、動的にページを表示している場合であれば、アクセスが発生したときに何かしらログを取得しておき、それを集計した結果をアクセス数としてランキング表示したりすることができます。
また、静的なページであればバッチ処理でアクセスログから各ページのアクセス数をカウントすることになるでしょう。
もしくは、アクセスログ解析ツールを導入しているのであればツールでアクセス数を確認し、HTMLを作成することもあるでしょう。

しかし、アクセス数とはPVのことであったり、VISIT数のことであったり、ツールによって定義がことなったりするので、
複数の方法でアクセス数をカウントするのはあまり好ましくありません。
Google Analyticsを導入しているのであればそれを活用し、そこからアクセス数を表示できるのが理想です。

そこで、Google Analytics APIの出番です。
APIを通してログ解析データを取得することができるので、自動でアクセス数のランキング表示といったことが可能になるのです。

準備

APIを簡単に使うためのライブラリの準備

Google Analytics API class for PHPという記事でGoogle Analytics APIを簡単に呼び出せるようにするライブラリが公開されていますので
利用させてもらいます。ページ中程にあるダウンロードのリンクからzipファイルをダウンロードし、以下のような構造で配置しました。

/googleapisample
|-- lib
|  `--googleanalytics.class.php
`--sample.php

また、このライブラリをそのまま使うとエラーが発生するので、以下を修正しておきます。

ライブラリの修正

未定義変数のエラー対策(124行目付近)

PHP:
  1. $dims = ""; // => $dimes変数を初期化
  2. $dimensions = $entry->getElementsByTagName('dimension');
  3. foreach ($dimensions as $dimension) {
  4.     $dims .= $dimension->getAttribute('value').'~~';
  5. }

$header配列への代入を変更(250行目付近)

PHP:
  1. // $header[] = array("application/x-www-form-urlencoded");
  2. $header[] = "application/x-www-form-urlencoded";

APIで指定するパラメータ

Google Analytics APIで取得できるデータについては公式サイトのドキュメント(英語のみ)にあるDimensions & Metrics Referenceが参考になります。

まずは、以下のキーワードについて理解しておく必要があります。

dimensions

dimensionsはレポートでのプライマリキーを定義します。SQLでいうSELECT DISTINCTでカラム名を定義するイメージでしょうか。どのような値がプライマリキーとして指定できるかはさきほどのDimensions & Metrics Referenceを見ていただくとして、例えばga:browser,ga:countryを指定するとブラウザと国の複合キーを指定したことになります。

metrics

metricsはPVやクリック数などの総計の情報を意味します。ここで指定したパラメータの値が結果として返されます。例えばga:visitorsを指定することでビジター数を取得できます。

filters

フィルターする条件を記述します。例えばga:pageTitle=@商品詳細を指定すると「商品詳細」という文字列をtitleタグに含むもの というように簡単にフィルタリングの処理を指定できます

sort

取得する結果を何でソートするかを指定出来ます。たとえば-ga:visitsとするとvisit数で降順(-を指定)でデータを取得します。

これらのAPIのパラメータを指定することで、欲しいデータを柔軟に取得することができます。

サンプルコード

では、実際にこのライブラリを使って弊社のブログの記事へのアクセス数を以下の条件で取得してみたいと思います。

  • ページタイトルとページのPATHでグループ処理
  • ビジター数を降順で取得
  • 解析期間は10/1〜10/22
  • ブログの記事だけを集計したいのでフィルター条件でPATHが/blog/から始まるものだけを取得

PHP:
  1. <?php
  2. /**
  3. * Sample Code (> PHP5.3)
  4. */
  5. require __DIR__ . "/lib/googleanalytics.class.php";
  6. // require dirname(__FILE__) . "/lib/googleanalytics.class.php" // PHP5.2;
  7. // アカウント設定
  8. $email   = 'あなたのgoogleアカウント';
  9. $pass    = 'パスワード';
  10. $profile = '1234567890'; // 編集画面で表示されるプロファイルID
  11. try {
  12.     // create an instance of the GoogleAnalytics class using your own Google {email} and {password}
  13.     $ga = new GoogleAnalytics($email, $pass);
  14.     // set the Google Analytics profile you want to access - format is 'ga:123456';
  15.     $ga->setProfile('ga:' . $profile);
  16.     // set the date range we want for the report - format is YYYY-MM-DD
  17.     $ga->setDateRange('2010-10-01','2010-10-22');
  18.     // get the report for date and country filtered by Australia, showing pageviews and visits
  19.     $report = $ga->getReport(
  20.         array('dimensions'=>urlencode('ga:pageTitle,ga:pagePath'),
  21.             'metrics'=>urlencode('ga:visits'),
  22.             'filters'=>urlencode('ga:pagePath=~^/blog/'),
  23.             'sort'=>urlencode('-ga:visits')
  24.             )
  25.         );
  26. } catch (Exception $e) {
  27.     print 'Error: ' . $e->getMessage();
  28. }
  29. print_r($report);

とても簡単ですね。気をつけるところはパタメータをurlencodeしなくてはならないところがあるという部分と、ライブラリが処理に失敗した場合は例外を投げてくれるのでtry, catchを利用するという点です。
そして、この出力結果の一部は以下のようになります。

PHP:
  1. (
  2.     [CakePHP Behaviorでバリデーション周りの効率化を図る : エクスギア Blog~~/blog/2009/06/cakephp-behaviorでバリデーション周りの効率化を図る/] => Array
  3.         (
  4.             [ga:visits] => 282
  5.         )
  6.  
  7.     [CakePHP 携帯ライブラリと位置情報ライブラリを使った簡易GPS検索プラグイン「GeoSimple Plugin」 : エクスギア Blog~~/blog/2010/09/geo_simple_plugin/] => Array
  8.     (
  9.         [ga:visits] => 189
  10.     )
  11. .....
  12. )

取得した結果はキーがdimensionsを~~を区切りとしたものになっています。そして、値の配列がmetricsで指定した値になっています。
あとは、この結果をよしなに加工してあげれば動的に簡単にアクセス解析をサイトに表示したり、バッチ処理でメールで飛ばしたりと色々と役に立つ事と思います。

また、サイト内に表示したりする場合はAPIを毎回叩かずに、ローカルにキャッシュするなどの処理を意識する必要がありますね。

日本語でこういった記事をあまり見なかったので参考になれば幸いです。

関連するその他の記事

Comments

Leave a Reply