Twitterでフォローしてる人を取得
apiで取得しようとすると100人ぐらいで取得できなくなるので、作った。
ユーザー名とパスワード入れて使う。
スクレイピングもっと効率的なやり方あるだろうし。
ページ変わると動かなくなるのであまり推奨できない。
あとrubyのマーシャルデータで保存。
#!/usr/bin/env ruby require 'rubygems' require 'mechanize' def login(mail, pass) agent = WWW::Mechanize.new() page = agent.get("http://twitter.com/") form = page.forms.first form['session[username_or_email]'] = mail form['session[password]'] = pass form.submit agent end def get_folloing(agent, result, url, user) filter = ["invitations/find_on_twitter", "home", user, "following", "#{user}/favorites", ""] nexturl = "" puts "url: #{url}" begin page = agent.get(url) rescue puts "error: #{url}" return result end req = page.root.search('a').map {|e| e['href']} req.each do |i| if /http:\/\/twitter.com\/(.*)/ =~ i fr = true name = $1 result.each do |j| if name == j fr = false break end end filter.each do |j| if name == j fr = false break end end if fr puts name result << name end end if /\/following\?page=(.*)/ =~ i if $1.to_i > 0 nexturl = "http://twitter.com#{i}" end end end if nexturl != "" get_folloing(agent, result, nexturl, user) end result end def main(user, pass) r = [] agent =login(user, pass) list = get_folloing(agent, r, "http://twitter.com/#{user}/following", user) puts list.size open("follow.dat", "w") {|f| Marshal.dump(list, f)} end user = "user" pass = "pass" main(user, pass)