アカウント消して復活させるとふぉろーしているのにふぉろーしていないみたいな状態になったので、remove&followするためのスクリプトを書こうとした。まず、ふぉろーしている人たちのリストをスクレイピングして持ってこようと思ったらなんか謎のエラー。
>> agent.submit(login_form) WWW::Mechanize::RedirectLimitReachedError: Maximum redirect limit (20) reached from /opt/local/lib/ruby/gems/1.8/gems/mechanize-0.8.4/lib/www/mechanize.rb:505:in `fetch_ page' from /opt/local/lib/ruby/gems/1.8/gems/mechanize-0.8.4/lib/www/mechanize.rb:509:in `fetch_ page' from /opt/local/lib/ruby/gems/1.8/gems/mechanize-0.8.4/lib/www/mechanize.rb:221:in `get' from /opt/local/lib/ruby/gems/1.8/gems/mechanize-0.8.4/lib/www/mechanize.rb:328:in `submit ' from (irb):48 from (null):0
これじゃどうしようもないなーと思ったけど、そういえばTwitterPodに情報がたまっているので、適当に使うことにする。
/Users/yasuhisa% sqlite3 ~/Library/Application\ Support/TwitterPod/TwitterPod.sql sqlite> .output twitter.txt sqlite> select ZSCREEN_NAME from ZTWITTER; sqlite> .quit /Users/yasuhisa% cat twitter.txt | sort | uniq > twitter_uniq.txt
で、Rubyで適当にでっちあげれば完成。すでにfollowしている人をfollowしようとすると403という意味違うだろ、みたいなエラーに若干とまどったなどした。
require 'twitter' twit = Twitter::Base.new("id", "password") followings = [] f = open("/Users/yasuhisa/twitter_uniq.txt") f.each {|following| followings.push following.chomp} f.close followings.reverse.each{|f| puts f begin twit.destroy_friendship(f) twit.create_friendship(f) sleep 3 rescue Twitter::Unavailable => ex p ex.message retry rescue Twitter::CantConnect =>ex p ex.message end }
あっという間におわた。
おまけ
羃分布
発言回数で流行の羃分布になっているか見てみることにした。発言回数をソートしたファイルを作成。
/Users/yasuhisa% cat twitter.txt | sort | uniq -c | perl -anle 'print $F[0]' | sort -rn > twit_count.txt
ヒストグラムをRで吐かせる。
twit <- read.table("~/twit_count.txt",header=FALSE)[,1] hist(twit,nclass=30,xlab="number of twit")
どう見ても羃分布です、本当にありがとうございました。
こっちのほうがいいかな?軸ひっくり返しただけと言えばそうなんだけど。
barplot(twit)
ABC分析
マーケティングとかで使われるABC分析をやってみると、3割のuserによって、timelineの8割が構成されていることが分かりました(少なくとも僕のtimelineは)。
plot(seq(length(twit)) / length(twit), cumsum(twit) / sum(twit),type="l",lwd=3,xlab="",ylab="発言の累積パーセンテージ") abline(0.8,0,col="red",lwd=3)