Declaration
class Distribution
attr_reader :users # Hash {String => Integer}
attr_reader :tags # Hash {String => Integer}
attr_reader :sample # Integer
def initialize() # Distribution.new() -> dist
def reset() # dist.reset() -> dist
def add(uri) # dist.add(str) -> true/false
def sort_users() # dist.sort_users() -> arr
def sort_tags() # dist.sort_tags() -> arr
end
Overview
Bookmark::Distribution は,指定した URI 群をブックマークしているユーザ, およびタグの分布を調べるためのクラスです.メンバ変数 users,tags はそれぞれ, ユーザ名,タグ名の出現回数をハッシュで保持しています.また,メンバ変数 sample はブックマークエントリ情報を取得した URI の数を表します.
add() メソッドは,指定された URI のブックマークエントリ情報を取得し, そのエントリに出現したユーザ/タグ情報を users/tags に反映させます. sort_users(),sort_tags() メソッドはそれぞれ users, tags を出現回数で降順にソートし, その結果を配列で返します.
Example
#!/usr/bin/ruby -Ku
require 'hatena'
# parameter
SAMPLE = 10
LOWER_USER = 10
UPPER_USER = 100
dist = Hatena::Bookmark::Distribution.new
n = 0
Hatena::Bookmark::URITrace.new(ARGV[0]).each(200) { |uri|
count = Hatena::Bookmark::count(uri)
next if (count < LOWER_USER || count > UPPER_USER)
if (dist.add(uri))
printf("%3d %s\n", n, uri)
n += 1
break if (n >= SAMPLE)
end
sleep(2)
}
puts("----------")
puts("Get #{dist.sample} entries.")
puts
# ユーザ数で降順にソートした後,出力
puts("Users")
puts("----------")
i = 0
dist.sort_users.each { |item|
break if (i >= 10)
printf("%3d %3d %s\n", i, item[1], item[0])
i += 1
}
puts
# タグ数で降順にソートした後,出力
puts("Tags")
puts("----------")
i = 0
dist.sort_tags.each { |item|
break if (i >= 10)
printf("%3d %3d %s\n", i, item[1], item[0])
i += 1
}
Resul 0 http://www16.atwiki.jp/tokoroten/pages/1018.html 1 http://sankei.jp.msn.com/world/america/081205/amr0812051048004-n1.htm 2 http://fragments.g.hatena.ne.jp/mutronix/20081201/1228140772 3 http://thinkit.jp/article/721/1/ 4 http://d.hatena.ne.jp/takerunba/20081204/p3 5 http://ameblo.jp/takepon-jp/entry-10172557462.html 6 http://japan.cnet.com/news/media/story/0,2000056023,20374232,00.htm 7 http://business.nikkeibp.co.jp/article/skillup/20081202/178948/ 8 http://bizmakoto.jp/makoto/articles/0811/27/news008.html 9 http://wiredvision.jp/news/200812/2008120322.html ---------- Get 10 entries. Users ---------- 0 10 tt_clown 1 9 Ubuntu 2 6 andsoatlast 3 3 kitakyudai 4 3 Britty 5 3 llil 6 3 t298ra 7 2 jummai 8 2 terafuri 9 2 another Tags ---------- 0 17 science 1 14 ネタ 2 11 web 3 11 はてなブックマーク 4 11 はてブ 5 10 はてな 6 9 tcpdump 7 9 社会 8 8 科学 9 7 business