「WEBプログラム覚書::[PHP]google Analytics からアクセスの多いページの情報を取得」に引き続きGoogle Analytics API からデータを取得してみる。
PV数だけの場合、SERPsで上位だと内容無くてすぐお帰りになられてるページでも
ランクインしてしまうのでオススメとして表示するには微妙な感じになってしまいます。
なので今回はちゃんと読まれてるページをオススメページとして取ってみようかと思います。
条件としては「ページビューが100以上」かつ「ページの閲覧時間が2時間以上」のページを取得してみます。
本当は「平均ページ滞在時間」を取りたいのですが、今のところ用意されてないみたいです。
フィルタ
条件を指定するにはフィルタを使います。難しそうな感じがして
前回避けたんですが、実はそれほど難しくもないです。
analytics_apiを利用してフィルタを設定するにはanalytics_filtersクラスを利用すると
簡単便利です。
利用しなくても必要な処理はエンコードくらいなので
それほど難しくないです。
フィルタの書式は下記ページを参照ください。
/pg/以下の「ページビューが100以上」かつ「ページの閲覧時間が2時間以上」のページ
<?php
require_once('analytics_api.php');
$api = new analytics_api();
$filters = new analytics_filters('ga:pageviews', '>=', '100');
/**
* フィルタの追加はadd_and()とadd_or()を使う。
*/
// 2時間を秒に変換
$filters->add_and('ga:timeOnPage', '>=', 60*60*2);
// /pg/以下のディレクトリを指定
$filters->add_and('ga:pagePath', '=~', '^/pg/*');
// 前回引っかかった(not set)を省く
$filters->add_and('ga:pageTitle', '!=', '(not set)');
if($api->login(GA_ID, GA_PASS)) {
$result = $api->data(
'ga:792415', // id プロファイルのNoを指定
'ga:pageTitle,ga:pagePath', // dimension ページタイトルとパス
'ga:pageviews,ga:timeOnPage',// metric ページビュー
'-ga:timeOnPage', // sort
'2009-11-01', // start
'2009-12-15', // end
'20', // max_results 取得件数
1,
$filters
);
} else {
throw new Exception('ログインに失敗しました。IDとパス要確認');
}
echo '<pre>';
var_dump($result);
echo '</pre>';
?>
ん?「平均ページ滞在時間」はデータ取得後にPHPに計算させればいけるんじゃないか?
1PV辺りの閲覧時間が長いページ
PHP
<?php
require_once('analytics_api.php');
$api = new analytics_api();
$filters = new analytics_filters('ga:pageviews', '>=', '100');
$filters->add_and('ga:pageTitle', '!=', '(not set)');
if($api->login(GA_ID, GA_PASS)) {
$result = $api->data(
'ga:792415',
'ga:pageTitle,ga:pagePath',
'ga:pageviews,ga:timeOnPage',
false,
'2008-12-16',
'2009-12-15',
'50',
1,
$filters
);
} else {
throw new Exception('ログインに失敗しました。IDとパス要確認');
}
$new_result = array();
$time = array();
foreach ($result as $name => $pagedata) {
$title = $name;
$url = key($pagedata);
$view = $pagedata[$url]['ga:pageviews'];
$top = $pagedata[$url]['ga:timeOnPage'];
$viewtime = (int) $top / (int) $view;
$new_result[] = array(
'time' => $viewtime,
'view' => sprintf('(%sビュー)', $view),
'html' => sprintf('<a href="%s">%s</a>', $url, $title)
);
// ソート用の配列
$time[] = $viewtime;
}
array_multisort($time, SORT_DESC, SORT_NUMERIC, $new_result);
$html = '';
foreach ($new_result as $value) {
$html .= sprintf('<dt>%s 秒: %s</dt><dd>%s</dd>',
$value['time'],
$value['view'],
$value['html']
);
}
echo '<dl>' . $html . '</dl>';
?>
実行結果
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