自分と reblog 傾向が似てる人
をリストアップ。誰を follow すればいいか。
自分が reblog した post の reblog notes を調べて top list を作るだけ。即席 script:
require "rubygems" require "tumblr" require "open-uri" require "hpricot"
このテの script にはopen-uri, hpricotは外せない。
def get_postids(user) ids = [] uri = "#{user}.tumblr.com" Tumblr::API.read(uri) do |pager| l = pager.last_page # l = 0 0.upto(l) do |n| puts "#{n}/#{pager.last_page}" data = pager.page(n) data.posts.each do |post| ids.push(post.postid) end end end return ids end
自分が reblog した全 post の ID を配列で返す。
def get_reblognotes(id, key) url = "http://www.tumblr.com/dashboard/notes/#{id}/#{key}" notes = [] print "get url.. #{url}\n" begin doc = Hpricot(open(url).read) (doc/:li).each do |item| #puts "---\n" a1, a2, a3 = (item/:a) reblogger = if a2.class == Hpricot::Elem; a2.inner_html; else; ""; end rebloggee = if a3.class == Hpricot::Elem; a3.inner_html; else; ""; end #p reblogger, rebloggee notes.push([reblogger, rebloggee]) end rescue OpenURI::HTTPError print "http error\n" end return notes end
指定した post の reblognotes を調べて、reblog 履歴の配列を返す。たとえば A が B を reblog して B が C を reblog して C が最初に post したんだったら、[["A", "B"], ["B", "C"], ["C", ""]] って風に。HTMLの解析はかなりテキトー。
def main ids = get_postids("myhoney0079") rebloggers = {} ids.each do |id| key = 'xxxxxxxxx' ar = get_reblognotes(id, key) ar.each do |notes| rebloggers[notes[0]] = rebloggers[notes[0]].to_i + 1 end end p rebloggers sorted_data = rebloggers.sort {|a, b| b[1] <=> a[1]} sorted_data.each do |data| print "#{data[0]} #{data[1]}\n" end end main()
メイン部。全 post を持ってきてそれぞれの reblognotes を調べて post 数を値に持つreblogger のハッシュを作る。それをソートして表示。
トップの人たちを自分が follow してるか表示したり、
followee 間の包括関係(この人を follow しておけばこの人はいらない、とか)などがわかるといいかも。