FUN YOU BLOG

Gmailからスケジュールを管理するメイドちゃんをRubyでつくった

+++++++++++++++++++++++++++++++++++++++++++++++ 2012-07-10 [http://alfe.hateblo.jp/entry/2012/07/10/145204:title=続・メイドちゃんに改良版があります。 ] []+++++++++++++++++++++++++++++++++++++++++++++++[]

■ さくら壮のペットな彼女 に触発されました。 上記のライトノベルに、メール自動返信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カレンダーから予定を引っ張ってきたりとか。 いろいろ遊べそうですね。