memo:rubyでimapに接続する
rubyお久しぶり。
classの文法忘れてた。
:symbolはなぜか思い出してた。
yieldを自然に使ってた。
メインはgmailに検索かけれるよ!というのが発見なので
とってきてからについては適当に。
http://www.ruby-lang.org/ja/man/html/net_imap.html
http://youichi-kato.cocolog-nifty.com/blog/2008/03/ruby_gmail_imap_bf37.html
http://mac-memo.blogspot.com/2008/01/rubygmail_30.html
とimap.rb
をコピペしました。
#! ruby require 'rubygems' require 'net/imap' require 'yaml' require 'kconv' @KCODE = "utf8" def getInit() config = YAML.load_file("config.yaml") username = config["user"] password = config["pass"] return { :username => username, :password => password, :port => 993, :usessl => true, :server => "imap.gmail.com" } end def connImap(conf) imap = Net::IMAP.new(conf[:server],conf[:port],conf[:usessl]) imap.login(conf[:username],conf[:password]) return imap end #使ってみたかっただけのyield def yiel(imap,ids) imap.fetch(ids,["ENVELOPE","BODY"]).each {|mail| subt = mail.attr["ENVELOPE"]["subject"].toutf8 ddat = mail.attr["ENVELOPE"]["date"].toutf8 yield({:subject=>subt,:date=>ddat }) } end ########################################################### ###main的な? def getKakeibo(query) mails = Array.new imap = connImap(getInit()) imap.select(Net::IMAP.encode_utf7("[Gmail]/All Mail")) ids = imap.search(query,"utf-8") #まさにつかってみてるだけですね。 yiel(imap,ids) { |f| mails << f } return mails.reverse end #fetch/filter:フィルター文字列ぐらいはしていできるようにした。 mails = getKakeibo(["SUBJECT",('もかね')]) require 'date' require 'parsedate' #今月の最初の日の文字列 このへんキモ過ぎて恥ずかしい day = Time.now fmday = Date.new(day.year,day.month,1) fmday = (Date.new(2008,7,1)) fmday = fmday.year.to_s << fmday.month.to_s << fmday.day.to_s mails2 = Array.new #filter:今月最初の日より未来のデータをArrayにpush mails.each{|m| mdate = ParseDate::parsedate(m[:date]) mdate = mdate[0].to_s << mdate[1].to_s << mdate[2].to_s if (fmday <= mdate) then mails2 << m end } #map/out:よき形にして出力僕はtsvが好ましい mails2.each{|e| sub = e[:subject].toutf8 sub =~ /もかね([0-9]+)?(.*)/u puts $1.tosjis << "\t" << $2.tosjis << "\t" << e[:date].to_s } __END__ usage: 1.configfileを用意 user: "アカウント@gmail.com" pass: "パスワード" なファイル名「config.yaml」を用意してスクリプトと同じフォルダに 2.ruby スクリプト名 > 出力ファイル でOK。 メモ: ・メールボックス INBOXの他に [Gmail]/All Mail=>All Mail てな具合にINBOX以外にも進めること。 wlの.folderを参考にした。 ・検索 ids = imap.search(["SUBJECT",('もかね')],"utf-8") てな具合に結構うれしい感じに検索が効く。日本語の時はcharset指定が必須っぽい ・クラス化しようかと思ったけど。。 事切れた。 これは何? Gmailに件名"もかね[金額(半角数字)]使用メモ"というメールを送信しておけば 後からお金の使用状況をそれなりに把握できるlifehack(笑) どれだけ簡便に書き込めるか、ということでメールを データ保管の安定性からGmailを選択 かつてはGmailを秀丸メール(データフォルダが生テキスト) に入れて正規表現でいじってたけどimap直接と成ったので少しは updateしたのかも。そういや前回はperlでした。 searchの部分をいじればまぁいろいろ使い勝手はあるだろうよ。 See いろんなところをこぴぺしました。ありがとうございました。