follower/followingを全件取得する
年末ぐらい?からpage=番号指定では100人以上取得できなくなってて、cursor=-1を指定してnext_cursorを辿っていく仕様になってたので、follower/following取得を修正した。
最後のページにはnext_cursorが無いので無くなるまでループする。
http://bitbucket.org/shokai/bot-ahokai/changeset/0fcc0d7dc269/
Twitterers.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'open-uri' require 'rexml/document' class Twitterers def initialize(user,pass) @user = user @pass = pass end def followers puts 'getting followers list' get_users("http://twitter.com/statuses/followers.xml") end def friends puts 'getting friends list' get_users("http://twitter.com/statuses/friends.xml") end def get_users(uri) results = Array.new cursor = -1 while true do print "reading cursor:#{cursor}..." begin page = open("#{uri}?cursor=#{cursor}", :http_basic_authentication => [@user, @pass]).read() rescue puts "error!" break end break if !(page =~ /<user>/) doc = REXML::Document.new(page) REXML::XPath.each(doc, '//user/screen_name()'){ |name| results << name.text } puts " #{results.length} users" cursor = REXML::XPath.first(doc, '//next_cursor()').text.to_i break if !cursor or cursor == 0 sleep 5 end puts 'finished!' return results end end
follow返し
refollow.rb
#!/usr/bin/env ruby require 'rubygems' require 'yaml' gem 'twitter' require 'twitter' require File.dirname(__FILE__) + '/Twitterers.rb' config = YAML::load open(File.dirname(__FILE__) + '/config.yaml') tws = Twitterers.new(config["user"], config["pass"]) followers = tws.followers friends = tws.friends twit = Twitter::Base.new(Twitter::HTTPAuth.new(config["user"], config["pass"])) i = 0 (followers-friends).each{ |u| i+=1 puts "follow #{u} (#{i}/#{(followers-friends).size})" begin twit.friendship_create(u) rescue puts '!follow error' end sleep 5 }