require 'rubygems' require 'hpricot' require 'net/http' Net::HTTP.version_1_2 # const HttpString = 'http://' TwitterAddress = 'twitter.com' PathOfFollowing = '/friends?page=' PathOfFollowers = '/followers?page=' NumOfWidth = 20 # arg if ARGV.length < 2 then printf("usage: ruby rkk.rb username password [max_page]\n") abort end $username = ARGV[0] $password = ARGV[1] if ARGV.length < 3 then $max_page = 50 else $max_page = ARGV[2].to_i end if ARGV.length < 4 then $mode = 'default' else $mode = ARGV[3] end # global $following_page = {} $followers_page = {} $img_src = {} $kataomoi = [] # parse i = 1 while i<=$max_page path = '/'+$username+PathOfFollowing+i.to_s req = Net::HTTP::Get.new(path) req.basic_auth($username, $password) Net::HTTP.start(TwitterAddress){|http| body = http.request(req).body doc = Hpricot(body) doc.search("td[@class~='thumb']").each{|td| a = td.at('a') screen_name = a['href'].gsub(HttpString+TwitterAddress+'/', '') src = a.at('img')['src'] $following_page[screen_name]=path $img_src[screen_name]=src } } i+=1 end i = 1 while i<=$max_page path = PathOfFollowers+i.to_s req = Net::HTTP::Get.new(path) req.basic_auth($username, $password) Net::HTTP.start(TwitterAddress){|http| body = http.request(req).body doc = Hpricot(body) doc.search("td[@class~='thumb']").each{|td| a = td.at('a') screen_name = a['href'].gsub(HttpString+TwitterAddress+'/', '') src = a.at('img')['src'] $followers_page[screen_name]=path $img_src[screen_name]=src } } i+=1 end # output printf("\n") printf("\n") printf("%s's Following/Followers\n", $username) printf("\n") printf("\n") if $mode=='ff' then printf("
\n") printf("

Following

\n") i = NumOfWidth printf("

\n") $following_page.to_a.sort{|a, b| a[0]<=>b[0]}.each{|a| printf("\"%s\"\n", HttpString+TwitterAddress+a[1], $img_src[a[0]], a[0]) i-=1 if i==0 then printf("

\n") printf("

\n") i = NumOfWidth end } printf("

\n") printf("
\n") printf("

Followers

\n") i = NumOfWidth printf("

\n") $followers_page.to_a.sort{|a, b| a[0]<=>b[0]}.each{|a| printf("\"%s\"\n", HttpString+TwitterAddress+a[1], $img_src[a[0]], a[0]) i-=1 if i==0 then printf("

\n") printf("

\n") i = NumOfWidth end } printf("

\n") end printf("
\n") printf("

ryo-omo-i

\n") i = NumOfWidth printf("

\n") $following_page.to_a.sort{|a, b| a[0]<=>b[0]}.each{|a| if $followers_page.has_key?(a[0]) then $followers_page.delete(a[0]) printf("\"%s\"\n", HttpString+TwitterAddress+a[1], $img_src[a[0]], a[0]) i-=1 if i==0 then printf("

\n") printf("

\n") i = NumOfWidth end else $kataomoi.push(a[0]) end } printf("

\n") printf("
\n") printf("

kata-omo-i

\n") i = NumOfWidth printf("

\n") $kataomoi.each{|a| printf("\"%s\"\n", HttpString+TwitterAddress+$following_page[a], $img_src[a], a) i-=1 if i==0 then printf("

\n") printf("

\n") i = NumOfWidth end } printf("

\n") printf("
\n") printf("

kata-omo-ware

\n") i = NumOfWidth printf("

\n") $followers_page.to_a.sort{|a, b| a[0]<=>b[0]}.each{|a| printf("\"%s\"\n", HttpString+TwitterAddress+a[1], $img_src[a[0]], a[0]) i-=1 if i==0 then printf("

\n") printf("

\n") i = NumOfWidth end } printf("

\n") printf("
\n") printf("\n") printf("\n")