OAuth 認証を受けて Google API を叩けるようになったので、Google Analytics の集計データを API で取得して、PHP で アクセス ランキングを表示してみます。
error_reporting( 0 );
$client_id = '123456789012-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
$client_secret = 'HogeFugaPiyoHogeFugaPiyo';
$refresh_token = 'XXXXXXXX_REFRESH_TOKEN_XXXXXXXX';
$end_date = date('Y-m-d'); // 今日から
$start_date = date('Y-m-d', strtotime("- 7 days")); // 過去 1 週間分を集計
$limit = 10; // 最大取得ページ数
// refresh_token から access_token を得る
$url = 'https://accounts.google.com/o/oauth2/token';
$data = array(
'refresh_token' => $refresh_token,
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'refresh_token',
);
$options = array('http' =>
array(
'method' => 'POST',
'content' => http_build_query($data),
),
);
@$response = file_get_contents($url, false, stream_context_create($options));
if (!$response) {
echo "authentication failed.";
exit();
}
$json = json_decode($response);
$access_token = $json->access_token;
// pageviews を取得
$url = 'https://www.googleapis.com/analytics/v3/data/ga';
$data = http_build_query( array(
'ids' => 'ga:3857126',
'dimensions' => 'ga:pagePath,ga:pageTitle',
// 'filters' => 'ga:pagePath=~^/archive/\\d+/\\d+/',
'metrics' => 'ga:pageviews',
'sort' => '-ga:pageviews',
'max-results' => $limit,
'start-date' => $start_date,
'end-date' => $end_date,
'access_token' => $access_token,
));
@$response = file_get_contents( $url. '?'. $data );
if (!$response) {
echo "pageviews failed.";
exit();
}
$json = json_decode($response);
//print_t($json);
$size = count($json->rows);
// 整形して出力
echo '<ul>';
for ($i = 0; $i < $size; $i++) {
$item = $json->rows[$i];
echo '<li><a href="'. $item[0]. '">'. ($i+1) . "位:". $item[1]. '</a> '. $item[2]. " hits </li>\n";
}
echo '</ul>';
POST リクエストを組み立てます。print_r で確認してみてください。
API のリクエスト パラメータを変更すると、Google Analytics のあらゆるデータをそこそこ高度に集計できるので、現在のページを起点に、訪問者が次に遷移したページのランキングから、"この記事を読んだ人はこんな記事も読んでいます"一覧を生成することもできます。
このサイトでも、ブログ記事毎に"この記事を読んだ人はこんな記事も読んでいます"一覧を表示しています。以前は自前で作った仕組みで集計していましたが、"餅は餅屋"ということで、アクセス集計は全て Google Analytics に一本化し、現在のところその集計データからランキングを生成するようにしています。
$data = http_build_query( array(
'ids' => 'ga:3857126', // ここはユーザ毎に変わります
'dimensions' => 'ga:pagePath,ga:pageTitle',
'filters' => 'ga:previousPagePath==/archive/1234/12345678/index.php;'. // 起点となるページ
'ga:nextPagePath!=/archive/1234/12345678/index.php;'. // 自身は集計から外す
'ga:nextPagePath=~^/archive/\\d+/\\d+/', // 次に遷移した個別のブログ記事のみ集計する
'metrics' => 'ga:pageviews',
'sort' => '-ga:pageviews',
'max-results' => $limit,
'start-date' => $start_date,
'end-date' => $end_date,
'access_token' => $accessToken,
));
ga:previousPagePath と ga:nextPagePath が同じ自分自身を指すデータを除外します。
このサイトでは、Amazon のアフィリエイト リンクのクリックも Google Analytics で集計しています。アフィリエイト リンクがクリックされると、/_tracking/ASIN/1234567890 の URL が記録されるので、この URL のアクセスを集計して、"Amazon の気になる商品ランキング"なんてものも生成することもできます。ただし、取得できるデータが ASIN だけですので、商品名や商品画像を表示するにはここから更に一ひねりが必要です。
$data = http_build_query( array(
'ids' => 'ga:3857126', // ここはユーザ毎に変わります
'dimensions' => 'ga:pagePath',
'filters' => 'ga:pagePath=~^/_tracking/ASIN/',
'metrics' => 'ga:pageviews',
'sort' => '-ga:pageviews',
'max-results' => $limit,
'start-date' => $start_date,
'end-date' => $end_date,
'access_token' => $accessToken,
));
/_tracking/ASIN/ で始まるアクセスのみ集計します。Amazon の気になる商品ランキングと同様、このサイトでは、ソフトウェア アーカイブなどのダウンロード リンクのクリックも集計していますので、"人気のダウンロード一覧"といったランキングの生成も簡単です。
$data = http_build_query( array(
'ids' => 'ga:3857126', // ここはユーザ毎に変わります
'dimensions' => 'ga:pagePath',
'filters' => 'ga:pagePath=~^/_tracking/download/',
'metrics' => 'ga:pageviews',
'sort' => '-ga:pageviews',
'max-results' => $limit,
'start-date' => $start_date,
'end-date' => $end_date,
'access_token' => $accessToken,
));
/_tracking/download/ で始まるアクセスのみ集計します。