まめ畑

ゆるゆると書いていきます

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だと・・・。


そういう事がわかるようになりました。