Hatena::Grouprubyist

たばさの RSSフィード

01/30(土) 2010

twitter following map

| 12:41 | twitter following map - たばさの を含むブックマーク はてなブックマーク - twitter following map - たばさの

2万followとかあるからちょいと無理があるかな

リストを作りたくなる

どこかにあるかな


twitterFollowResearch.rb

#!ruby
require 'open-uri'
require 'mechanize'


username = "my-twitter-name"
password = "my-twitter-pass"


$urlbase="http://twitter.com/"
$myname=username
$maxpage=5
$interval=3

agent = WWW::Mechanize.new
agent.log = nil #logger
agent.max_history = 1 
page = agent.get("#{$urlbase}/login")

form = page.forms[1]
form.fields.find {|f| f.name == 'session[username_or_email]'}.value = username
form.fields.find {|f| f.name == 'session[password]'}.value = password
#form.fields.find {|f| f.name == 'remember_me'}.value = '1'
page = agent.submit(form, form.buttons.first)

personfile="twitterPerson.txt"
persons=[]
persons=File.read(personfile).split if File.exist?(personfile)


def getfollowingnext name,data
  data=~/\/following\?page=[^-"]+/
  $&
end

def getfollowing name,data
  res=data.scan(/http:\/\/twitter\.com\/([^"]+)/).flatten
  res.reject!{|i| i=~/.*\// }
  res.uniq-["home",name,$myname]
end

def getfollowingmain name,agent
  interval=$interval
  maxpage=$maxpage
  url=$urlbase+name+"/following"
  sleep interval
  data=agent.get(url).body
  maxpage-=1
  STDERR.print"." if $DEBUG
  res= getfollowing name,data
  while 1
    tmp=getfollowingnext name,data
    p tmp if $DEBUG
    break if ! tmp
    url=$urlbase+name+tmp
    sleep interval
    data=agent.get(url).body
    maxpage-=1
    STDERR.print"." if $DEBUG
    res+=getfollowing name,data
    break if maxpage==0
  end
  res
end

name= ARGV[0] || $myname
li=getfollowingmain name,agent
print name,",",li*",","\n"

tmp=li
persons+=li
tmp.each{|id|
  res=getfollowingmain id,agent
  print id,",",res*",","\n"
  persons+=res
}
#puts persons*",","(",persons.size,")"
 > ruby twitterFollowResearch.rb tomoeshinohara >result.txt

など。手抜き。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20100130
カレンダー
<< 2010/01 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
archive Error : RSSが取得できませんでした。