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" で良いが、覚えられないのでそのまま。