« hpricotでふぁぼったーをパースしてみた | トップページ | ふぁぼられグラフ作るよ! »

2008年2月 3日 (日)

ふぁぼられグラフ

ふぁぼられ集計  を改良して、
アイコンを並べたグラフっぽいHTMLに書き出すようにしてみました。

----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2

# const
Address = 'favotter.matope.com'
Path1 = '/user.php?user='
Path2 = '&mode=new&page='

TwitterAddress = 'http://twitter.com/'

if ARGV.length == 0 then
  printf("usage: ruby favogra.rb account [max_page]\n")
  exit
end
if ARGV.length < 2 then
  max_page = 20
else
  max_page = ARGV[1].to_i
end

counter = {}
counter.default=0
img_src = {}

# parse
path = Path1+ARGV[0]+Path2
i = 1
skip_flag = false
while i<max_page
  path = Path1+ARGV[0]+Path2+i.to_s
  Net::HTTP.start(Address){|http|
    response = http.request_get(path)
    body = response.body
    doc = Hpricot(body)
    doc.search("div[@class~='info']").each{|div|
      # skip
      if skip_flag == false then
        div.search('img').each{|img|
          counter[img['title']]+=1
          img_src[img['title']]=img['src']
        }
      else
        skip_flag = false
      end
    }
  }
  i+=1
  skip_flag = true
end

# output
printf("<HTML>\n")
printf("<HEAD>\n")
printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n")
printf("<TITLE>%s fav by</TITLE>\n", ARGV[0])
printf("</HEAD>\n")
printf("<BODY>\n")

counter.to_a.sort{|a, b| b[1]<=>a[1] or b[0]<=>a[0]}.each{|a|
  printf("<P>")
  i = 0
  while i<a[1]
    printf("<A HREF=\"%s\"><IMG SRC=\"%s\" ALT=\"%s\"></IMG></A>\n", TwitterAddress+a[0], img_src[a[0]], a[0])
    i+=1
  end
  printf("</P>")
}

printf("</BODY>\n")
printf("</HTML>\n")

----

サンプルとして、 現時点での僕のふぁぼられグラフ を載せておきます。

|

« hpricotでふぁぼったーをパースしてみた | トップページ | ふぁぼられグラフ作るよ! »

twitter」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/464804/10222968

この記事へのトラックバック一覧です: ふぁぼられグラフ:

« hpricotでふぁぼったーをパースしてみた | トップページ | ふぁぼられグラフ作るよ! »