Google Calendar API を Ruby から操作したい

Rubygems の gcalapi を使えば Google Calendar API を簡単に叩けます。使い方は他にもいろいろ載ってるのでここでは触れません。

使ってみて、ちょっと困ったのが、gcalapi は イベント UID *1が読めない事。

Google Calendar から送られてくるデータに、ちゃんと UID は入っているけど、gcalapi gem 側でそれを認識していないのが原因だということが分かりました。とりあえず、てっとっりばやく修正するには、

module GoogleCalendar
  class Event
    attr_accessor :uid
  end
  Event::ATTRIBUTES_MAP["uid"] = { "element" => "gCal:uid", "attribute" => "value" }
end

等とすれば認識されるようになります。オープンクラス便利ですね。他のパラメータも同様に Event::ATTRIBUTES_MAP を書き換えて、アクセサを定義すれば認識されるようになります。*2

*1:iCalendar 形式 [RFC 2445] における、ユニークな識別子

*2:ちなみに、gcalapi は オリジナルの XML を保持しておいて、認識しているパラメータのみを REXML で書き換えるので、認識されていないパラメータがあるからといって、Event.save! した際に情報が欠損したりはしないようです。