ちょっと前に緑色のフリーコンテンツ氏が、以下のようなツイートをしていたのを思い出しました。
はてなブログ、年間アクセスランキング出す機能とかさくっとつけてくれないかな
— 俺、だるやなぎになります。 (@daruyanagi) 2014, 12月 25
もう営業日終わっただろうし、無いんだったら作ればいいのよ!という感じ。Google Analytics API を使えば出来るんじゃないの?と思ったので、適当なキーワードで検索すると既に先人がちらほらと。
Google Analytics API v3をPHPから利用する方法 | karakaram-blog
ほぼそのまんまで使える!と思ったので、C# に落とし込みました。
var certificate = new X509Certificate2(Convert.FromBase64String(ServiceAccountCertificate), "notasecret", X509KeyStorageFlags.Exportable); var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("SERVICE_ACCOUNT_ID") { Scopes = new[] { AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsReadonly } }.FromCertificate(certificate)); var service = new AnalyticsService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "sample", }); var resource = service.Data.Ga.Get("VIEW_ID", "2014-01-01", "2014-12-31", "ga:pageviews"); resource.Dimensions = "ga:pageTitle,ga:pagePath"; resource.Sort = "-ga:pageviews"; resource.MaxResults = 10; var data = resource.Execute(); foreach (var row in data.Rows) { Console.WriteLine("{0}, {1}, {2}", row[0], row[1], row[2]); }
めんどくさかったので日付とかはハードコーディングしてあります。Dimentions などの指定が PHP SDK とは異なり、メソッドの引数で行えないのがちょっと罠っぽかったです。
実行してみたところ、ちゃんとアクセス数が多い順にデータが取れました。
後ははてなブログで使いやすいように、はてな記法で出力する形で整えてあげれば完成です。
2014 年のアクセス数ランキング
- Facebook の Graph API 視点から自分新聞が何をやっているのか調べてみた
- ASP.NET MVC 3 開発入門 - インデックス
- 接続文字列の書き方をまとめてみる
- IIS で SSL 3.0 を無効にする方法
- Twitter や Facebook が SSL 3.0 を無効にしたので死にかけた話
- ASP.NET MVC 3 開発入門 (16) - HTML ヘルパーを活用
- Entity Framework の俺的まとめ
- Web API よりも HttpClient に注目したい
- 格安航空会社 (LCC) に乗りまくった感想
- HTML5 の Drag and Drop API と File API を使ってファイルアップロードを実装する
というわけで、年間アクセス数ランキングを簡単に出すことが出来ました。
今年は SSL 3.0 でハイパー悩まされた年な気がします。しかし、Azure Web サイトネタでたくさん書いた気がするんですが、ランキングには入ってきていなくてちょっと寂しい。
おまけ
Google Analytics API を使うのがめんどくさいという人は、普通にブラウザから確認できるのでこっちでもいい感じがします。URL は取りにくいですけど。
それでは皆さん、良いお年を。