+++++++++++++++++++++++++++++++++++++++++++++++ 2012-07-10 /entry/2012/07/10/145204 []+++++++++++++++++++++++++++++++++++++++++++++++[]
■ さくら壮のペットな彼女 に触発されました。 上記のライトノベルに、メール自動返信AIというのが出てくるのです。 その名も メイドちゃん。 龍之介(開発者)宛てのメールに好き勝手返信するAIプログラムなのです。
なんか楽しそうなので、摸倣してみることに。 しかし、メール返信をAIに任せるのは怖すぎるので、別の機能をさせてみよう。 今回はローカルで動けばいいからRuby使おう。
そんなわけで スケジュール管理メイドちゃん ができました。
■ 機能はこんな感じ 携帯から予定メモをGmailに送信する ↓ Rubyプログラム起動 (朝に自動実行するよう設定しておく) ↓ メイドちゃんが、「今日の予定はこれですよ」 と携帯にメールしてくれる。
普段から予定をメモしている人向けですね。 うまく使えば、定期券の更新とか本の返却とかのうっかり忘れが格段に減るのではないかと。
■ プログラムを使う前準備は ・予定メモメールを[Work]に割り振るよう事前にフィルタをかける。 ・Gmailにメールを送信する。 形式はこんな感じで 件名 [半角スペース] (予定内容) 本文←なくても可
つまり [件名]0613 研究室紹介 [本文]16:20から みたいに書くとバッチシ認識してくれます。
■ プログラムの流れは、 ・gmailログイン ↓ ・Workフォルダの未読メールを調べる。 ↓ ・今日の分のタスクがあれば、内容をストックして、メールは既読に。 ↓ ・今日の分のタスクがあれば、メール送信!
といった感じ。 あっさりしてますね。
■ ソースコードはこんな感じ
|ruby| #coding: utf-8
require 'gmail' require 'kconv' day = Time.now
#gmailにログイン USERNAME='gmailid@gmail.com' #gmailのアドレス PASSWORD='gmailpass' #gmailのパスワード gmail = Gmail.new(USERNAME,PASSWORD)
#メールを送信するかしないかのフラグ mailFlag = 0 #本文ストック用String fullSchedule = ""
#Workフォルダ内の未読を調べる mail = gmail.mailbox('Work').emails(:unread).map do |mail| #件名があるときだけ内容を読み込む if mail.subject != nil schedule = Kconv.toutf8(mail.subject) today = day.strftime("%m%d")
#今日のタスクがある
if /^#{today}/ =~ schedule
mailFlag += 1
schedule = schedule.sub(/^#{today}\s/,'')
schedule = schedule.sub(/\s/,"\n・") #複数のタスクを分ける
fullSchedule += "・" + schedule + "\n"
#本文処理⇒備考として
if !mail.text_part && !mail.html_part
if mail.body.decoded.encode("UTF-8", mail.charset) != ""
fullSchedule += " (" + mail.body.decoded.encode("UTF-8", mail.charset) + ")\n"
end
elsif mail.text_part
fullSchedule += " (" + mail.text_part.decoded + ")\n"
elsif mail.html_part
fullSchedule += " (" + mail.html_part.decoded + ")\n"
end
next
end
mail.mark(:unread) #使わなかったメールを未読に
end #mail.mark(:unread) #読み込んだメールをすべて未読に end
今日の予定があるならメール送信
if mailFlag > 0 #メールヘッダ maid_tyan_messageFirst = <<EOS おはようございます!
EOS maid_tyan_messageFirst += "今日("+ day.strftime("%m月%d日") + ")のご予定をお知らせします。\n" #メールフッタ maid_tyan_messageLast = <<EOS
それでは 今日も頑張ってください♪ EOS
#メールを送信 sendTo = "address@docomo.ne.jp" #送信先アドレス sendSub = "メイドちゃんより" sendText = maid_tyan_messageFirst + fullSchedule + maid_tyan_messageLast
gmail.deliver do to sendTo subject sendSub body sendText end
end ||<
Gmailを使えるようにするため、cmdで ↓ をしてやってください。
|| gem install ruby-gmail ||<
そして、実行すると
|| おはようございます!
今日(06月14日)のご予定をお知らせします。 ・たとえばそんな予定 (おもむろな補足やおおざっぱな備考) ・もふもふした予定 ・混沌とした予定 (いつもニコニコあなたの隣に這いよる感じの)
それでは 今日も頑張ってください♪
||<
みたいなメールが届きます。
■ とりあえず完成です。
ですが、もっといろんなことができるようにさせたいですね。
メイドちゃんの挨拶をランダム生成したりとか、
天気予報と連動させたりとか、(「今日は傘要りますよ」的な)
Googleカレンダーから予定を引っ張ってきたりとか。
いろいろ遊べそうですね。