GoogleアナリティクスのAPIを使ってアクセルランキングを表示する方法。
Googleアナリティクスは、Googleのアカウントを持っていれば簡単にサイトのアクセス解析が行えるツールですが、PHP用のAPIも公開されているので、このAPIを使ってサイトのアクセスランキングを表示することも可能です。
こちらの記事を参考にさせていただきました。
バッチ処理で定期的にランキング表示用のデータをXmlやHtmlファイルとして生成し、それを読み込んで表示するやり方もあると思います。
次のサンプルのコードは、バッチ処理ではなくランキング表示箇所で都度 getRanking() 関数を実行する想定をしているので、お行儀よく、一定期間はキャッシュファイルにその内容を保存するようします。
<?php
define(APPPATH,'/var/www/html/xxx/application');
require_once(APPPATH.'/third_party/google-api-php-client-master/src/Google/autoload.php');
function getRanking(){
//キャッシュ有効期間秒
$cacheTime=3600;
//キャッシュを確認
$cache_path =APPPATH."/cache";
if(
file_exists($cache_path."/rank.html")
&& filemtime($cache_path."/rank.html")> time()-$cacheTime
) {
return file_get_contents($cache_path."/rank.html");
}
//サービスアカウントのメールアドレス
$client_email = "999999999999-akd72jdks8fjwld82kxls92kdyxpsl@developer.gserviceaccount.com";
//Googleアナリティクスの設定画面から確認したビューID
$view_id = "12345678";
//サービスアカウントの秘密キーファイルの読み込み
//このファイルはダウンロードしたファイルを適当な場所に置き、
//file_get_contents()で読み込む
$private_key = @file_get_contents(APPPATH."/third_party/google-api-php-client-master/API_Project-xxxxxxxxxxxx.p12");
//取得期間に設定する日付(昨日から今日までの分)
$dayFrom = date("Y-m-d",strtotime("-1 day"));
$dayTo = date("Y-m-d");
//解析のメトリクスをページビューに設定
$metrics = "ga:pageviews";
//解析結果取得のオプション
$options = array(
'dimensions'=>'ga:pagePath,ga:pageTitle',
'metrics'=>'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits',
//正規表現を使ってフィルタリングする場合はfiltersオプションも使える
//'filters'=>'ga:pagePath=~\/pr\/[^\/]*\/[^\/]*.html$',
'sort'=>'-ga:pageviews', //ページビューの多い順に取得
'max-results'=>'50' //最大50件取得
);
//Googleクライアントのインスタンス生成
$client = new Google_Client();
$client->setAssertionCredentials(
new Google_Auth_AssertionCredentials(
$client_email,
array('https://www.googleapis.com/auth/analytics.readonly'),
$private_key
)
);
//Analyticsのインスタンスを作成
$analytics = new Google_Service_Analytics($client);
//データの取得
$obj = $analytics->data_ga->get("ga:{$view_id}",$dayFrom,$dayTo,$metrics,$options);
$rank="";
$rankCount=0;
$rankMax=10;
foreach($obj->getRows() as $row) {
$rankCount++;
$rank.="<li><a href=\"".$row[0]."\">".$row[1]."</a></li>\n";
if($rankCount>=$rankMax) {break;}
}
$rank1="<ol>".$rank1."</ol>\n";
//Googleから解析結果を取得した場合はキャッシュファイルも更新
file_put_contents($cache_path."/rank.html",$rank);
return $rank;
}
echo getRanking();
?>

コメントを残す