WEBプログラム覚書::[PHP]google Analytics からアクセスの多いページの情報を取得」に引き続きGoogle Analytics API からデータを取得してみる。

PV数だけの場合、SERPsで上位だと内容無くてすぐお帰りになられてるページでも ランクインしてしまうのでオススメとして表示するには微妙な感じになってしまいます。

なので今回はちゃんと読まれてるページをオススメページとして取ってみようかと思います。 条件としては「ページビューが100以上」かつ「ページの閲覧時間が2時間以上」のページを取得してみます。

本当は「平均ページ滞在時間」を取りたいのですが、今のところ用意されてないみたいです。

フィルタ

条件を指定するにはフィルタを使います。難しそうな感じがして 前回避けたんですが、実はそれほど難しくもないです。

analytics_apiを利用してフィルタを設定するにはanalytics_filtersクラスを利用すると 簡単便利です。

利用しなくても必要な処理はエンコードくらいなので それほど難しくないです。

フィルタの書式は下記ページを参照ください。

参照サイト

/pg/以下の「ページビューが100以上」かつ「ページの閲覧時間が2時間以上」のページ

  1. <?php
  2. require_once('analytics_api.php');
  3. $api = new analytics_api();
  4.  
  5. $filters = new analytics_filters('ga:pageviews', '>=', '100');
  6.  
  7. /**
  8.  * フィルタの追加はadd_and()とadd_or()を使う。
  9.  */
  10.  
  11. // 2時間を秒に変換
  12. $filters->add_and('ga:timeOnPage', '>=', 60*60*2);
  13.  
  14. // /pg/以下のディレクトリを指定
  15. $filters->add_and('ga:pagePath', '=~', '^/pg/*');
  16.  
  17. // 前回引っかかった(not set)を省く
  18. $filters->add_and('ga:pageTitle', '!=', '(not set)');
  19.  
  20. if($api->login(GA_ID, GA_PASS)) {
  21.     $result = $api->data(
  22.               'ga:792415',                 // id プロファイルのNoを指定
  23.               'ga:pageTitle,ga:pagePath',  // dimension ページタイトルとパス
  24.               'ga:pageviews,ga:timeOnPage',// metric ページビュー
  25.               '-ga:timeOnPage',            // sort
  26.               '2009-11-01',                // start
  27.               '2009-12-15',                // end
  28.               '20',                        // max_results 取得件数
  29.               1,
  30.               $filters
  31.               );
  32. } else {
  33.     throw new Exception('ログインに失敗しました。IDとパス要確認');
  34. }
  35.  
  36. echo '<pre>';
  37. var_dump($result);
  38. echo '</pre>';
  39. ?>

ん?「平均ページ滞在時間」はデータ取得後にPHPに計算させればいけるんじゃないか?

1PV辺りの閲覧時間が長いページ

PHP

  1. <?php
  2. require_once('analytics_api.php');
  3. $api = new analytics_api();
  4.  
  5. $filters = new analytics_filters('ga:pageviews', '>=', '100');
  6. $filters->add_and('ga:pageTitle', '!=', '(not set)');
  7.  
  8. if($api->login(GA_ID, GA_PASS)) {
  9.     $result = $api->data(
  10.                           'ga:792415',
  11.                           'ga:pageTitle,ga:pagePath',
  12.                           'ga:pageviews,ga:timeOnPage',
  13.                           false,
  14.                           '2008-12-16',
  15.                           '2009-12-15',
  16.                           '50',
  17.                           1,
  18.                           $filters
  19.                           );
  20. } else {
  21.     throw new Exception('ログインに失敗しました。IDとパス要確認');
  22. }
  23.  
  24. $new_result = array();
  25. $time = array();
  26.  
  27. foreach ($result as $name => $pagedata) {
  28.     $title = $name;
  29.     $url = key($pagedata);
  30.     $view = $pagedata[$url]['ga:pageviews'];
  31.     $top = $pagedata[$url]['ga:timeOnPage'];
  32.     $viewtime = (int) $top / (int) $view;
  33.  
  34.     $new_result[] = array(
  35.                          'time' => $viewtime,
  36.                          'view' => sprintf('(%sビュー)', $view),
  37.                          'html' => sprintf('<a href="%s">%s</a>', $url, $title)
  38.                          );
  39.     // ソート用の配列
  40.     $time[] = $viewtime;
  41. }
  42.  
  43. array_multisort($time, SORT_DESC, SORT_NUMERIC, $new_result);
  44.  
  45. $html = '';
  46. foreach ($new_result as $value) {
  47.     $html .= sprintf('<dt>%s 秒: %s</dt><dd>%s</dd>',
  48.                      $value['time'],
  49.                      $value['view'],
  50.                      $value['html']
  51.                      );
  52. }
  53. echo '<dl>' . $html . '</dl>';
  54. ?>

実行結果


Warning: require_once(analytics_api.php): failed to open stream: No such file or directory in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2009/12/phpgoogle_analytics_part2.php on line 207

Fatal error: require_once(): Failed opening required 'analytics_api.php' (include_path='/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Archive_Tar:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Calendar:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Console_Getopt:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Net_UserAgent_Detect:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Net_UserAgent_Mobile:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/PEAR:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Structures_Graph:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/Text_Highlighter:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/XML_Parser:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear-pear.php.net/XML_Util:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear/archive_tar:/home/users/1/lolipop.jp-dp07173486/web/_/vendor/pear/console_getopt:/home/u in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2009/12/phpgoogle_analytics_part2.php on line 207