自分と 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 しておけばこの人はいらない、とか)などがわかるといいかも。