|
昨日のカウンタ: 今日のカウンタ: |
Push Notificationに対応した通知専用アプリでもtwitterクライアントでもいいので、それを作るというのが王道なのでしょうが、ちょっと手軽さを出したくて、別にMMSでもいいじゃんという気がしてTwitterのReplyを監視するのソースを変更させて頂いて、こんな風にしてみました。
適当なLinuxサーバがあったので、そこでcronでまわしています。
#!/usr/bin/ruby -Ku =begin twitter_polling.rb originally written in: http://d.bulkitem.com/20080224.html#p01 modified by SAkira=end #$DEBUG = true $VERBOSE = true #require 'rubygems' #require 'ruby-growl' require 'nkf' require 'net/smtp' require 'open-uri' require 'rss' require 'pstore' class SendMail FromMailAddress = 'hogehoge@foo.bar' ToMailAddress = '*********@softbank.ne.jp' SMTPHost = '127.0.0.1' SMTPPort = 25 def notify(key, id, status) output = key + " from " + id + "\n" + NKF.nkf('-u', status) Net::SMTP.start(SMTPHost, SMTPPort) do |smtp| smtp.send_message(output, FromMailAddress, ToMailAddress) end end end module Twitter AUTH_INFO = ['userid', 'passwd'] REPLIES = 'http://twitter.com/statuses/replies.rss' DATABASE = '.twitter_data.txt' class Status attr_accessor :uid, :date, :status, :guid def initialize @uid = nil @date = nil @status = nil @guid = nil end end class RepliesWatch def initialize(notifer) @notifer = notifer @data = nil @update = false end def load db = PStore.new(Twitter::DATABASE) db.transaction do @data = db['guid'] end @data = Hash.new if @data.nil? end def save if @update db = PStore.new(Twitter::DATABASE) db.transaction do db['guid'] = @data end end end def get open(Twitter::REPLIES, {:http_basic_authentication => Twitter::AUTH_INFO}) do |f| if f.status == ['200', 'OK'] begin rss = RSS::Parser::parse(f.read) rescue RSS::InvalidRSSError rss = RSS::Parser::parse(f.read, false) end tmp = Hash.new obj = Twitter::Status.new rss.items.each do |item| obj.uid, obj.status = item.title.split(': ', 2) obj.date = item.pubDate obj.guid = item.guid unless @data.has_key?(obj.guid.to_s) @notifer.notify("reply", obj.uid, obj.status) @update = true end tmp.store(obj.guid.to_s, obj.dup) end @data = tmp end end end end end begin tw = Twitter::RepliesWatch.new(SendMail.new) tw.load() tw.get() tw.save() rescue Exception => e puts e.to_s end
まぁ悪くない感じで動いているのではないかと…
昨日見せていただいたときに
第18回 携帯電話とAsteriskをつなげる
http://itpro.nikkeibp.co.jp/article/COLUMN/20070405/267511/?P=3
(3)chan_cellphoneであるようにAsteriskがBluetooth経由でソフトバンクモバイルの端末を操ってSMSで通知されているのかと思いました.
そこまで必要ないですし、これで充分なんで。目的を達成できるのな手段はできるだけシンプルに。
ソフトバンクのMMSはEメールアドレスも持って、インターネットからのメールの受信もできるのは良い拡張だと思います。