GoogleAnalytics APIを使って「週間人気エントリートップ10」を作ってみた

電脳備忘録

1週間の人気記事をGoogleAnalyticsを使って表示させることにしました。
言語は使い慣れたPHPです、はい。

ライブラリを使うのでダウンロードして、任意の場所にアップロードするのをお忘れなく。

Google Developers Consoleでプロジェクト作成やGoogle Analytics側の設定については下記のエントリーが詳しいので参考にしてみてください。
コードもサンプルを参考にさせていただきました。

PHPでGoogle Analytics APIを利用して、アクセス解析のデータをSlackに投げる(前編)

自分用にカスタマイズしたのがこれ。

< ?php
// ライブラリの読み込み
require_once 'google-api-php-client/src/Google/autoload.php';
// サービスアカウントのメールアドレス
$service_account_email = '***@***';
// 秘密キーファイルの読み込み
$key = file_get_contents('***.p12');
// プロファイル(ビュー)ID
$profile = '***';
// Googleクライアントのインスタンスを作成
$client = new Google_Client();
$analytics = new Google_Service_Analytics($client);
// クレデンシャルの作成
$cred = new Google_Auth_AssertionCredentials(
$service_account_email,
array(Google_Service_Analytics::ANALYTICS_READONLY),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
function getWeeklyRanking($analytics, $profile){
$results = $analytics->data_ga->get(
'ga:' . $profile,
'7daysAgo',
'yesterday',
'ga:pageviews',
array(
'dimensions'  => 'ga:pageTitle,ga:pagePath',  // データ読み込み
'sort'        => '-ga:pageviews', // ページビューでソート
'max-results' => '10',            // 取得件数
)
);
// 取得したデータから必要な部分を抽出
$data = $results->rows;
// 7日前と昨日の日付を取得
$start = date('n/d', strtotime('-1 week'));
$end   = date('n/d', strtotime('-1 day'));
// 配列で取得したデータをループで回してランキングに
$ranking = "<h2>" . $start . '〜' . $end . 'の人気記事ランキング' . "</h2>\n" . "<ul>";
foreach ($data as $key => $row) {
$ranking .= '<li><a href="' . $row[1] . '">' . sprintf('%02d',($key + 1)) . '.' . $row[0] . ' 【' . $row[2] . 'PV】' . "</a></li>\n";
}
return $ranking;
}
$ranking = getWeeklyRanking($analytics, $profile);
echo $ranking.='</ul>';
?>

ナンバリングを2桁にしたり記事のリンクをつけたりしてます。とりあえずデータを取得し表示できることは確認しました、トラッキングコードを他所のサイトに貼り付けられてる問題により全く関係のないエントリーがTOP10を独占してしまっているので、実装は1か月くらい後になりそうです・・・。

広告

ブログの維持費に充てるでございます・・・。