はてなブックマーク「人気の商品」ランキング

Ruby ではてなブックマーク API を叩く で書いたものを使って何かコンテンツを作ってみようと言う事で,「人気の商品」の 2010年はてブ数 TOP100 を集計してみました.歴代はてブ多い順 のように全 URL を対象にすると集計するのはかなり大変になるのですが,商品に絞ると はてなブックマーク - 人気の商品 から辿れば良いのでだいぶ楽になります.尚,その年(今回は 2010年)かどうかを「最初にブックマークした人のブックマーク日時」から判断しているので,必ずしもその年に発売されたものとは限りません.

結果ですが,1位が 18禁文房具 だったり この夏もっとも泣けた本 が TOP10 に入っていたりと,いろいろな意味で話題になったものが上位にランクインしているようです.

全体的には書籍が圧倒的に多く,ジャンルもプログラミング関係や自己啓発本辺りに偏っている感じでしょうか.昔,注目の動画の傾向 を調べた事があったので,もっとアニメ・ゲーム関係の商品がブクマされているのかなと勝手に思っていたのですが,ざっと見てもアニメ・ゲーム関係の商品は アイドルマスター2涼宮ハルヒの消失 限定版 位でした.

ちなみに,今年話題になった もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら被ブックマーク数も結構な数に上っていましたが,発売日が 2009/12 だったようで初ブクマも 2009年代でした.そんな訳で,2010年の集計では対象外と言う扱いになってしまいました.

最後に amazon からタイトルを取得する際に使用した Ruby コードをメモしておきます.やり方としては,Ruby ではてなブックマーク API を叩く で書いたものを使っていったん TOP100 の URL リストを作成し,その各 URL に対して amazon に GET リクエストを送信し,結果から商品のタイトルをスクレイピングすると言うものです.

#!/usr/bin/ruby -Ku
require 'uri'
require 'net/http'
require 'rubygems'
require 'nokogiri'
Net::HTTP.version_1_2

prefix = "http://www.amazon.co.jp/exec/obidos/ASIN"
hateb  = "http://b.hatena.ne.jp/entry"
userid = ARGV.length > 1 ? ARGV[1] : "hatena-b-22"

File.open(ARGV[0]) { |file|
    file.each { |line|
        uri = URI.parse(line.scan(/http:\/\/\S+/).to_s)
        session = Net::HTTP.new(uri.host, uri.port)
        response = session.get(uri.path)
        html = Nokogiri::HTML.parse(response.body)
        html.search('//h1/span').each { |node|
            asin = uri.path.split('/')[3]
            title = node.text.gsub(/\[.+?\]/, "")
            title.strip!
            
            printf("<li><a href=\"%s/%s/%s/ref=nosim/\" target=\"_blank\">", prefix, asin, userid)
            printf("%s</a>", title)
            printf("<a href=\"%s/%s\" target=\"_blank\">", hateb, uri)
            printf("<img src=\"%s/image/%s\" alt=\"はてなブックマーク数\"></a></li>", hateb, uri)
            printf("\n")
        }
    }
}

取りあえず 2010年だけ纏めてみましたが,同じ方法でもう1, 2年分纏めて,どんなものが話題になっていたのか眺めてみようかと思います.