fuetter修正したよ
TwitterのFollowerをお知らせするスクリプト - まめ畑の自分をフォローしてくれているユーザの増減をお知らせしてくれるスクリプトですが、先日のTwitterのデザインの変更で動かなくなっていたので修正しました。
- 以下のものが必要なのでgemで入れてください。
- mechanize
- tmail
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 add_follower.each { |fr| mail_body << fr +"\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.each { |fr| mail_body << fr +"\n" } end mail_body.chomp send_mail(mail_body) 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"))
前にも書いていますが、一応再度書いておきます。
同じディレクトリにfuetter.yamlを以下のフォーマットで書きます。
user: id: twitterのID pass: twitterのPASS mail: server: smtpサーバーアドレス to: 送信先アドレス from: 送信元アドレス
これをcronで定期的に実行すればおk