TwitterでReplyが来たらメールするスクリプト
Twitterで、Replyが来たらメールするRubyスクリプトを書いてみた。
たまにしかログインしない人向けw
ruby twitter_reply_mail.rb "ユーザ名" "パスワード" "送信に使うSMTPサーバ名" "メールアドレス"
のように引数を指定して、タスク(Windows)やcronなどで定期的に呼び出せば、OK!
※Windowsで動作確認しましたが、Linux等でも動くと思う
twitter_reply_mail.rb
#!ruby -Ku require 'date' require 'net/http' require 'net/smtp' require 'yaml' require 'rexml/document' require 'kconv' $KCODE='u' def do_mail(subject,msg) # puts msg; return # for test msg=Kconv.tojis(msg) Net::SMTP.start( $smtpsrv, 25 ) {|smtp| smtp.send_mail <<____, $mailfrom, $mailto From: #{$mailfrom} To: #{$mailto} Subject: #{subject} Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=iso-2022-jp #{msg} ____ } puts "I sent a mail." end def error(msg) puts "Error: #{msg}" do_mail "Error from twitter_reply_mail", msg exit(1) end # parameters error "Give me paremeters!" if ARGV.length<4 account=ARGV[0]; password=ARGV[1]; $smtpsrv=ARGV[2]; $mailto=ARGV[3] $mailfrom=$mailto begin # load data DATA_FILE='twitter_reply_mail.dat' datafile=File.exist?(DATA_FILE) ? YAML.load(File.open(DATA_FILE, 'r')) : {} # http get res=nil; Net::HTTP.version_1_2 Net::HTTP.start('twitter.com', 80) {|http| req = Net::HTTP::Get.new('/statuses/replies.xml') req.basic_auth account, password res = http.request(req) } # parse mailbody="" error("Invalid responce code: #{res.code}") unless res.code.to_i==200 lastdate=(datafile['lastdate'].nil?) ? DateTime.new(2000) : DateTime.parse(datafile['lastdate'].to_s) newdate=DateTime.new(2000) doc=REXML::Document.new res.body doc.elements.each("/statuses/status") do |s| sdate=DateTime.parse(s.elements["created_at"].text) newdate=sdate if newdate < sdate next if sdate <= lastdate mailbody << s.elements["user/screen_name"].text << ": " << s.elements["text"].text << "\n" end # mail if !(mailbody.empty?) mailbody << "\nhttp://twitter.com/home/\n" do_mail "Twitter reply arrived", mailbody else puts "no update" end # save data datafile['lastdate']=newdate.to_s YAML.dump(datafile,File.open(DATA_FILE, 'w')) rescue error $!.to_s + "\nat " + $@.to_s end
※カレントディレクトリに、twitter_reply_mail.datというデータファイル(最新発言の日時を記録)を生成します。
※メールを送らずにテストしたい場合は、13行目のコメントをはずすと良いかも