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