投稿者:

Rubyでtwitter検索

Rubyの練習としてGMailアカウントのメールを受信し、与えられた単語でtwitter検索を行って、結果をメールで返信するプログラムを書いてみた。
Rubyのプログラム流儀にまだ慣れてないので、恐らくもっと簡潔にRubyらしく書く方法があると思うんだけど、いちおう動くようになったので記録として残しておく。何年か後に「昔はこんな簡単なの作るのに悩んでいたのか」と思えるようになると良いんだけど(笑)。

require 'rubygems'
require 'rss'
require 'tmail'
require 'tlsmail'
require 'net/smtp'
require 'net/pop'
require 'kconv'

MAIL_ID = 'GMailアカウント'
MAIL_PASS = 'GMailパスワード'
POP_SERVER = 'pop.gmail.com'
POP_PORT = 995
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587

Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
Net::POP3.start(POP_SERVER, POP_PORT, MAIL_ID, MAIL_PASS) do |pop|
  unless pop.mails.empty?
    pop.mails.each do |m|
      mail = TMail::Mail.parse(m.pop)
      if mail.subject == 'TWITTER SEARCH'
        word = mail.body.toutf8
        word = word.split(nil)
        url = "http://search.twitter.com/search.atom?q=" + URI.encode(word[0])
        rss = RSS::Parser.parse(url, false)
        mail_body = "'" + word[0] + "'の検索結果\n----------\n"
        if rss.items.count == 0
          mail_body = "No Search Results."
        else
          rss.items.each do |item|
            mail_body += item.author.name.content + "\n"
            mail_body += item.updated.content.getlocal.strftime('%Y/%m/%d %H:%M:%S') + "\n"
            mail_body += item.title.content + "\n"
            mail_body += "----------\n"
          end
        end
        send = TMail::Mail.new
        send.to = mail.from
        send.from = MAIL_ID
        send.date = Time.now
        send.mime_version = '1.0'
        send.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'}
        send.subject = 'Twitter Search Results'
        send.body = mail_body.tojis
        Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
        Net::SMTP.start(SMTP_SERVER, SMTP_PORT, "localhost.localdomain", MAIL_ID, MAIL_PASS, "plain") do |smtp|
          smtp.sendmail(send.encoded, send.from, send.to)
        end
      end
    end
  end
end

やっている事は単純で、GMailのPOPサーバからメールを取得して’TWITTER SEARCH’という表題のメールが来ていたら本文の単語でtwitter検索を行い、結果をRSSで取得してSMTPサーバで返信しているだけ。
でも文字コードがらみで結構手間取ってしまった。

このプログラムをレンタルサーバ等にコピーして、cronで定期的に実行すればtwitter検索をメールで行うエージェントになる。
実用性は無いんだけど、メールで指示された内容に従って何か処理を行い、結果をメールで返信するプログラムは他に応用が利きそうだ。何か思いついたらこれを元にして作ってみよう。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中