Twitterのfollowerの増減をお知らせするよ改
以前、1日のfollowerの増減をメールで送信 - まめ畑で書いたTwitterのfollowerの変化をメールしてくれるスクリプトを若干修正しました。
微々たる修正ですが、情報量が少し増えました。
以下のスクリプトをcronで実行するとメールが届きます。
yamlの設定方法などは上記のエントリを見てください。
require 'open-uri' require 'rubygems' require 'mechanize' require 'tmail' require 'net/smtp' require 'date' require 'time' require 'yaml' def read_yaml settings = YAML::load(File.open('fuetter.yaml')) $id = settings['user']['id'] $pass = settings['user']['pass'] $smtp_server = settings['mail']['server'] $mail_to = settings['mail']['to'] $mail_from = settings['mail']['from'] end def login agent = WWW::Mechanize.new agent.max_history = 1 agent.user_agent_alias = 'Windows IE 6' login_page = agent.get('http://twitter.com/') login_form = login_page.forms[1] login_form['session[username_or_email]'] = $id login_form['session[password]'] = $pass my_home = agent.submit(login_form) agent end def get_my_followers(isFileExists = false) begin agent = login my_follower_page = agent.get('http://twitter.com/followers') followers_count = (my_follower_page/"/html/body/div[2]/table/tbody/tr/td/div/div/h2").inner_text followers = followers_count.match(/\d+/)[0].to_i last_page_index = (followers%20 != 0) ? (followers/20 + 1) : (followers/20) if isFileExists == true before_followers = [] now_followers = [] (1..last_page_index).each do |n| my_follower_page = agent.get("http://twitter.com/followers?page=#{n}") follower = my_follower_page/"a.url" follower.each { |f| now_followers << f.inner_text } end f = open("followers.txt","r") while line = f.gets before_followers << line.chomp end new_follower = now_followers - before_followers remove = before_followers - now_followers make_body(new_follower, remove) end f = open("followers.txt","w") if isFileExists == false (1..last_page_index).each do |n| my_follower_page = agent.get("http://twitter.com/followers?page=#{n}") follower = my_follower_page/"a.url" follower.each { |fr| f.puts(fr.inner_text) } end else now_followers.each { |fr| f.puts(fr) } end f.close rescue =>ex #get_my_followers(isFileExists) end end def make_body(add_follower, bye_follower) mail_body = "*Your Followers Report*\n\n" mail_body << "*** New Follower(s) ***\n" if(add_follower.length == 0) mail_body << "No New Follower\n" else mail_body << add_follower.join("\n") end mail_body << "\n" mail_body << "*** Remove Follower(s) ***\n" if(bye_follower.length == 0) mail_body << "No Bye Follower\n\n" else bye_follower = cheakUser(bye_follower) mail_body << bye_follower.join("\n") end mail_body.chomp send_mail(mail_body) end def cheakUser(bye_follower) tmp = [] bye_follower.each {|id| begin open("http://twitter.com/#{id}") tmp << id.to_s + " [Exist]" rescue OpenURI::HTTPError tmp << id.to_s + " [Del]" end } tmp end def send_mail(body) today = Date.today mail = TMail::Mail.new mail.to = $mail_to mail.from = $mail_from mail.reply_to = $mail_from mail.subject = "Fuetter Report "+ today.strftime("%Y/%m/%d") mail.body = body mail.date = Time.now mail.mime_version = "1.0" mail.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'} mail.write_back Net::SMTP.start($smtp_server) do |smtp| smtp.sendmail(mail.encoded, mail.from, mail.to) end end read_yaml get_my_followers(File.exists?("followers.txt"))
*Your Followers Report*
*** New Follower(s) ***
No New Follower*** Remove Follower(s) ***
hogehoge [Exist]
というメールが届きます。
Removeされたほうに[Exist]というのがつきました。
これは、そのユーザが存在するかどうかという意味です。
ユーザが存在しない場合は[Del]となります。
ということで・・・・。
ここがDelになっているとIDが削除されたためのRemoveとなりますが、Existだと・・・。
そういう事がわかるようになりました。