ふと Twitter 関連の Web サービスの SBM ランキングを作成してみようと思い立ちました.ググって見ると,つい最近 本日決定!Twitter関連サービス全201サイトはてブ順ランキング - パパパパ と言う記事が人気を集めていたようなので,このリストを使用して はてなブックマーク 以外のブックマーク数も合算した値でランキングを作成し,ランキングがどのように変わるかを観察してみました(Topsy など海外の有名なサイトをいくつか追加しています).作成したランキングは以下のページ.
ざっと見た感じでは,Delicious のブックマーク数の影響でで上位の顔ぶれがだいぶ変わっています.基本的には,はてブと Delicious の影響力が大きくついで Yahoo! ブックマーク,だいぶ離されて livedoor クリップ と Buzzurl と言う感じになっています.
目についた所では,ツイナビ | ツイッター(Twitter)ガイド の Yahoo! ブックマーク数が(Yahoo! ブックマークの中では)何故か突出していて,SBM サービス毎の性質の違いが垣間見たような気がしました.
各種 SBM からブックマーク数を取得する部分は,いろんなソーシャルブックマークサービスのブックマーク件数を数値で取得するRubyのクラス書いた - What is Normal 〜 もはや普通がわからない 〜 を参考にして記述したものを github に公開しています.
これを使用した Twitter 関連の Web サービスの SBM ランキングを作成するためのクラスが以下になります.
module Twitter class SBMCounter require 'net/http' require 'uri' require 'kconv' require 'crown/hatena/bookmark' require 'crown/livedoor/clip' require 'crown/delicious' require 'crown/buzzurl' require 'crown/yahoo/bookmark' Entry = Struct.new(:uri, :score, :hatena, :livedoor, :delicious, :buzzurl, :yahoo) def initialize() @entries = Array.new end def add(uri) entry = Entry.new entry.uri = uri # 各種 SBM サービスからブックマーク数を取得する entry.hatena = Crown::Hatena::Bookmark.count(uri) entry.livedoor = Crown::Livedoor::Clip.count(uri) entry.delicious = Crown::Delicious.count(uri) entry.buzzurl = Crown::Buzzurl.count(uri) entry.yahoo = Crown::Yahoo::Bookmark.count(uri) entry.score = entry.hatena + entry.livedoor + entry.delicious + entry.buzzurl + entry.yahoo @entries.push(entry) return self end def each() @entries.sort { |x, y| y.score <=> x.score }.each { |entry| yield(entry) } return self end end end
メイン部分は以下のような感じ.
counter = Twitter::SBMCounter.new File.open(ARGV[0]) { |file| file.each { |line| begin line.chomp! counter.add(line) rescue Exception $stderr.puts(line) next end } } counter.each { |entry| printf("%5d %4d %4d %4d %4d %4d %s\n", entry.score, entry.delicious, entry.hatena, entry.livedoor, entry.buzzurl, entry.yahoo, entry.uri ) }