MS Exchange/Outlook のカレンダーとGoogle Calendarの同期 その2
id:otn:20140827 の続き。
Exchangeからのデータ取得は以前調べてVBScriptで書いたものをRubyで書き直す。
元のVBScriptを書くときに参考にしたサイトがちょっと見つからない。
結果の取得は、FindNextしながらwhileループしていたので、Enumeratorに変換する。
class Ecal FolderCalendar = 9 def self.list(from, to) @@calendar ||= WIN32OLE.new("Outlook.Application") .GetNamespace("MAPI").GetDefaultFolder(FolderCalendar) items = @@calendar.Items items.Sort "[Start]" items.IncludeRecurrences = true item = items.Find(%Q/[Start] < "#{to.strftime("%Y-%m-%d %H:%M")}" AND [End] >= "#{from.strftime("%Y-%m-%d %H:%M")}"/) Enumerator.new do |y| while item y << item item = items.FindNext end end end end now = Time.now time_min = now - 3600*24*7 #前後一週間 time_max = now + 3600*24*7 Ecal.list(time_min, time_max).each do |event| puts [event.Start, event.End, event.Subject].join(",") end
strftimeの書式を調べると、"%Y-%m-%d %H:%M" は "%F %R" で良いが、覚えられないのでそのまま。