|
|
||
2007-10-13 15:30 時点
要 Hpricot 。
require 'open-uri' class Stars require 'yaml' @@base = 'http://s.hatena.ne.jp/' @@entry = 'entry.json?uri=' @entry = nil def initialize(uri) @entry = YAML.load(open(@@base + @@entry + URI.escape(uri)).read.gsub(/([,:])/, '\\1 '))["entries"][0] end def count() return nil if @entry == nil return 0 unless @entry.key?("stars") @entry["stars"].length end end def get_entries a = [] require 'rubygems' require 'hpricot' uri = 'http://neo.g.hatena.ne.jp/keyword/%e9%a3%9f%e4%ba%ba%e8%b3%9e' doc = Hpricot(open(uri)) (doc/'div.section[2]/ul/li').map {|li| site, title = "" if /^(.+) - (.+) \(/ =~ li.innerText site, title = $1, $2 end u = "" (li/'a').map {|e| next unless e["class"] == nil u = e["href"] } a.push [site, title, u] } a end class Entry attr_accessor :site, :title, :uri, :b, :s end def main b_api_url = 'http://b.hatena.ne.jp/xmlrpc' entries = Hash.new {|h,k| h[k] = Entry.new } get_entries().each {|a| site, title, u = a[0..2] e = entries[u] e.uri = u e.site = site e.title = title } # bookmark count # TODO MAX 50 require 'xmlrpc/client' client = XMLRPC::Client.new2(b_api_url) client.call("bookmark.getCount", *entries.keys).each_pair {|uri,count| entries[uri].b = count } # star count entries.each_pair {|uri, e| s = Stars.new(uri) e.s = s.count } # dump sep = "|" puts sep + ["*URL", "*Site", "*Title", "*Bookmark", "*Star"].join(sep) + sep entries.sort_by {|uri,e| e.b }.reverse_each {|a| puts sep + [a[0], a[1].site, a[1].title, a[1].b, a[1].s].join(sep) + sep } end main()