ホームページ制作・大阪インフォメーションメディアデザイン

06-6809-5021

Staff Blog
スタッフブログ

  • Twitterでシェア
  • このエントリーをはてなブックマークに追加
  • Google+でシェア
  • follow us in feedly

ブログにランキングをこっそり実装してみた – google analytics API –

000

前から思っていたのだけども、やっぱり、ブログにはランキングがある方が良い気がする。
検索からたどり着いた人たちも人気記事が表示されていると、なんとなく見てしまう、同じ記事でも最新の記事より、見てしまう気がする。俺だけ?

ってことで、勝手にブログにランキングを実装してみようと思う。

まずは、ランキングを実装するにあたり、どうやるかですよ。
CMS等のプラグインでする場合、記事にアクセスがある度に、DBに書き込まれる仕様となっているようです。これは、アクセスが多くなればなるほど、動作が遅くなるとか。。。

それに、今から開始することで、正しいアクセス数が取れない(実装日からのカウントなので)のではないかなってことで、プラグインによるランキングはなし。

では、もうアクセス数をカウントしているgoogle analyticsでランキングを実装してみようとおもいます。

 

google analytics APIの設定

まずは、analyticsを使う上でgoogleのアカウントが必要です。
こちらは、以前からanalyticsを使っているので問題なし。

アカウントの作成はこちら

デベロッパーセンターにてプロジェクトの作成

googleでいろいろなAPIを提供されているのですが、こちらを利用するためにはプロジェクトを作成しないといけないものもあります。※作らなくていいのもあるようです。

google Developers console

プロジェクトを作成はデベロッパーセンターで行います。

google デベロッパーセンター

プロジェクトの作成を押すと下記のようにポップアップが表示されるので、プロジェクト名を入力後、作成ボタンを押してください。

 

google デベロッパーセンター

プロジェクトを作成するとページが変わります。

次はAPIの有効化と認証です。
サイドメニューのAPIと認証を選びAPIを選択する。

google デベロッパーセンター

 

その中から、Analytics APIを選択しAPIを有効にします。

google デベロッパーセンター

google デベロッパーセンター

 

次は認証です。

サイドメニューの認証を選び、OAuthの新しいクライアントIDをサービスアカウントとして作成してください。

google デベロッパーセンター

google デベロッパーセンター

 

すると公開鍵/秘密鍵としてjsonファイルがダウンロードされます。

しかし、今回はこれを使わずにP12キーを使うので、画面からP12キーを作成をおします。

google デベロッパーセンター

google デベロッパーセンター

p12という拡張子のファイルがまたダウンロードされます。

google デベロッパーセンター

こちらは認証するのに必要なのでしっかりと保管しておいてください。

 

アナリティクスのアカウントにクライアントIDを登録する。

google analytics

次は、上記でクライアントIDを作成したのでこちらを取得したいアナリティクスアカウントに登録します。

アナリティクスにログインし、アナリティクス設定にあるユーザー管理を選択。

google デベロッパーセンター

 

下の方にある権限を付与するユーザーに作成したIDにしたにあるメールアドレスを登録し、表示と分析のところからチェックをすべてつけておきます。

google デベロッパーセンター

google デベロッパーセンター

アナリティクスの設定は以上です。

あと、アナリティクスの設定のユーザー管理の上にあるビュー設定の項目よりビューIDも必要となるので確認しておいてください。

google デベロッパーセンター

ランキングの取得

ここからは、ランキングのデータを取得していきます。

待ちに待った?プログラムです。いかんせん、登録とか面倒ですが、実際コードを書くのはたのしいですよね。

さて、プログラムを書く前にまずはライブラリの取得をしておきましょう。

google/google-api-php-client

ここページの右下にあるダウンロードよりライブラリーを取得しておきます。

解答するといっぱいデータがありますが、ガッツリ使うのはSRCフォルダと「autoload.php」かな?その他のフォルダはなくても大丈夫でした。
ルートにあるファイルはいらないものがどれかは検証してません😥

さて、プログラムです。

まずは、ライブラリーの読み込みとWordPressのタグを使いたかったのでwp-load.phpを読み込んでみた。

require_once “./autoload.php";
require_once(‘./wp/wp-load.php’ );

次に上でいろいろと登録した情報を記述します。

 

$client_email = ‘メールアドレス';
$view_id = "ビューID";
$private_key = @file_get_contents(‘秘密キー.p12’);

クライアントIDを登録した時に取得したメールアドレス(アナリティクスに登録したやつ)とアナリティクスのビューID、そして秘密キーを設置します。

 

	$from = date("Y-m-d",strtotime("-1 day"));
	$to = date("Y-m-d",strtotime("-1 day”));

	$dimensions = "ga:pageTitle, ga:pagePath”;
	$metrics = "ga:pageviews";

	$max_result = 50;

	$option = array(
		"dimensions" => $dimensions,
		"max-results" => $max_result,
		"sort" => “-ga:pageviews",
		"filters" => "ga:pagePath=~/blog/\d",
	);

あとは取得したい期間の登録、取得したい情報、今回はページタイトル、ページURLとPV数、
取得したい件数もここで記載しておきます。

今回はランキングなのでソートをPV数でするのと、ブログのランキングだったのでフィルターをかけておきました。

そこからは下はトークンとかいろいろ設定このへんは決まり事のようなおまじない的な要素なので知りたい人は、解析してみてください。

※下にまとめてあるのを見てください。

あとは取得したデータの整形作業です。

今回は取得したデータのパスからwordpressのIDを取得しております。

整形したデータをJSON形式でファイルに出力しておきます。

アナリティクスの更新は1日一回だそうで、だったら、何度もプログラムを動かすのは非効率ってことで、書き出しをしております。

なんかごちゃごちゃ余分なものを書いてるかもしれませんが、見やすくするための名残です。

ご了承を

 

$obj = $analytics->data_ga->get("ga:{$view_id}",$from,$to,$metrics,$option);

foreach($obj->rows as $item){
	$arrayUrl[] = [
		url_to_postid(str_replace(“/index.html”, ””, $item[1])),
		str_replace("|大阪のホームページ制作・WEB制作会社I.M.D","",$item[0]),
		number_format($item[2])
	];
}

$json = json_encode($arrayUrl, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);

file_put_contents( dirname(__FILE__). '/google-analytics.json', $json);

ってことで、上記のをまとめたのが下記です。

トークンのところは上記に書いてませんが、こんなかんじです。


require_once "./autoload.php";
require_once "./wp/wp-load.php";


	$client_email = "メールアドレス";
	$view_id = "ビューID";
	$private_key = @file_get_contents("秘密キー.p12");

 	$from = date("Y-m-d”,strtotime("-1 day”));
	$to = date("Y-m-d”,strtotime("-1 day”));
	$dimensions = "ga:pageTitle, ga:pagePath”;
	$metrics = "ga:pageviews";

	$max_result = 50;

	$option = array(
		"dimensions" => $dimensions,
		"max-results" => $max_result,
		"sort" => “-ga:pageviews",
		"filters" => "ga:pagePath=~/blog/\d",
	);

	if(isset($_SESSION["service_token"])){
		$client->setAccessToken($_SESSION["service_token"]);
	}
	$scopes = array("https://www.googleapis.com/auth/analytics.readonly");
	$credentials = new Google_Auth_AssertionCredentials($client_email,$scopes,$private_key);

	$client = new Google_Client();
	$client->setAssertionCredentials($credentials);
	if($client->getAuth()->isAccessTokenExpired()){
		$client->getAuth()->refreshTokenWithAssertion($credentials);
	}
	$_SESSION["service_token"] = $client->getAccessToken();
	$analytics = new Google_Service_Analytics($client);
	$obj = $analytics->data_ga->get("ga:{$view_id}",$from,$to,$metrics,$option);

	foreach($obj->rows as $item){
		    $arrayUrl[] = [
			url_to_postid(str_replace(“/index.html”, ””, $item[1])),
			str_replace("|大阪のホームページ制作・WEB制作会社I.M.D","",$item[0]),
			number_format($item[2])
		];
	}

	$json = json_encode($arrayUrl, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);

	file_put_contents( dirname(__FILE__). '/google-analytics.json', $json);

これで出力したjsonファイルにWPのポストIDがでるのでWPのtemplateに読み込んでいい感じに表示してくださいな。

なんか、難しそうと敬遠してたのですが、やってみると意外とすんなり行きました。

こういうのも、もっといろいろと勉強していきますかね。

=== 修正:2015.08.18 ===
なぜか、最後のコードがちゃんと表示されていなかったので修正しております。
参考にされた方がいましたら、申し訳ございませんでした。

この記事を共有する

髭人
投稿者:髭人
2015年08月06日木曜日 | 20:06
しかし、今回のは、楽しくって勝手にやってしまったけども、よかったのだろうかw
社長に怒られないことを祈るばかりです。

この人が書いたその他のブログ記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • I.M.Dコーポレートサイト
お問い合わせ