twitterのfollowしていないfollower

followerのメール通知が漏れているような気がしたので、followし忘れている人を調べる


basic認証はopen-uri

open(http://zanmai.com/asdfasdf,
     :http_basic_authentication => [@user, @pass])

こうすると入れる


twitter-follower-following-diff.rb

#!/usr/bin/env ruby

require 'rubygems'
require 'open-uri'
require 'rexml/document'
require 'kconv'

class TwitDiff

  def initialize(user,pass)
    @user = user
    @pass = pass
  end
  
  def followers
    get_users("http://twitter.com/statuses/followers.xml", 10)
  end
  
  def friends
    get_users("http://twitter.com/statuses/friends.xml", 10)
  end
  
  def get_users(uri, max_page=10)
    results = Array.new
    
    for page in 1..max_page
      print "reading page#{page}..."
      page = open(uri.to_s+'?page='+page.to_s,
                  :http_basic_authentication => [@user, @pass]).read()
      break if (page =~ /<user>/) == nil
      doc = REXML::Document.new(page)
      REXML::XPath.each(doc, '//user/screen_name()'){ |name|
        results.push(name.text)
      }
      puts " #{results.length} users"
      sleep 10
    end
    puts 'finished!'
    return results
  end
  
end


irbから使う

>> load 'twitter-follower-following-diff.rb'
>> tw = TwitDiff.new("username", "passwd")
>> followers = tw.followers; friends = tw.friends
reading page1... 100 users
reading page2... 199 users
reading page3... 297 users
reading page4... 396 users
reading page5... 478 users
reading page6...finished!
reading page1... 100 users
reading page2... 196 users
reading page3... 293 users
reading page4... 389 users
reading page5...finished!


followしていないfollowerを調べる

>> diff = Array.new(followers)
>> friends.map{|x| diff.delete(x)}
>> diff.each{|f| print f+' '}
2nihon deldelete francesco3 kokiya karenquessy ddnote godnee gaykawasaki elvisbw TheGetEmMamis R_K elaxnis KH80T4NNC8O6 kellyabbot ufchits tkusano davidkima69 yuukorin HELPER_A MTVbestshowever fmts chazawa Victoria_Recano rsyudo planets1 kikuchige Seventale repserc_BAN vingtsept HappyOcean honishi kajuntk gadgetgirl79 DigitalFunTown twwatcher sjames23 tuskdon wtsn no_Connection Situn note103 upo Ascendancy gatya45 SAN_Morishi svarogg videowomen CageFighterKid ripped credit_card_faq Oozzl cc02jp dealsgalore mashcrunch luvgoo riywo AtomicPopcorn WallpaperManica sakazee TopPorn chicka89 twellow kylerheckman DuncanCarver KazuyoshiMorita gonza29 IMBlogger sowaka outsourcing2 cafebuzz roby006 Koitaroh guidebulgaria yukitanuki soooichiro Indiansingles yasutakky sgtakeru shinyai bike_rider thejustinesane kyolo Xenarae usk shinkee wildwell honhim kimucha tradingnothing juancarzola hanage leepz shihorix hikikimo chiyama syttru nippon_jin Xyo m0dest slick_carlvesel nejimakidai biblepassages biblequotes bibleverses quercia tw100 SamBrownback4 youyeahofjoytoy allyzhang con_mame Junyam joki_tw kawasakigrrl08 omniscient rm233 yasu00000 J_ENT mybuddy transformer45 tJyro movietrivia faultier drgqst mylittlepony 33rpm JimGilmore89 silversurfer672 kpbr licht sironekotoro MikeGravel3 BarackObama4 foursue snews 87oasam asesino movatest worstgirl AnneMoen twmode kasshy keroru Mcmoong yheld ladylog dwingdwang pwytter hirameki newcommunity obacan3 Speech jijiseminar lililryocolilil salento gestionale twitteradder 10ML taisei3200 fastfreddy LouiZoot sumotv q_chan MyUFO kenrou zept1971


10人ずつfirefoxで開く

>> 10.times do uri='http://twitter.com/'+diff.shift; `open #{uri}` end