rubyからGoogleCalendarにアクセスできるgcalapiを使ったアプリケーションを書いているのですが、こんなエラーが出て苦労しました。
/usr/lib/ruby/gems/1.8/gems/gcalapi-0.1.1/lib/googlecalendar/event.rb:130:in `save!’: [Line 8, Column 106, element gd:when] Invalid date/time value. (GoogleCalendar::EventInsertFailed)
from mail2gcal.rb:87:in `from_mail’
from mail2gcal.rb:102
from /usr/lib/ruby/1.8/net/pop.rb:528:in `each’
from /usr/lib/ruby/1.8/net/pop.rb:528:in `each_mail’
from mail2gcal.rb:97
要するに、GoogleCalendarにポストしたら “Invalid date/time value”といわれました、ということらしい。
Googleのドキュメントをあさると、
Invalid date/time value
The value you entered is not a valid date/time. Please enter a date and time in the correct format: YYYY-MM-DDThh:mm:ss. For example, “1975-09-25T06:20:00” is a valid date/time value, but “June 2005 5pm” is not.
(Invalid date/time value | Google Base Help Centre)
というのを発見。
「DateTimeは”1975-09-25T06:20:00″のフォーマットで渡してね」ということ。
そんなこと言われてもgcalapiにはDate型を渡しているし、うまくいく場合もあるからgcalapi側が変な形式のデータを渡しているとは考えにくい。ソース見ても、dt.iso8601 ってやっているし。
試行錯誤した結果、 event.enを渡さないとエラーになるらしいことが判明。
event.st = Time.parse(yaml[“st”].to_s) if yaml.has_key?(“st”)
# event.en = Time.parse(yaml[“en”].to_s) if yaml.has_key?(“en”)
gcalapiのサンプルについているmail2gcalに対して、
st: 2008-09-06 19:20:36
title: title of an event
desc: description of an event
where: location of an event
というメールを投げると再現します。
gcalapiとしては、開発者が渡したデータを適切に変換してGoogleCalendarに渡して、その結果帰ってきたエラーを適切に報告していただけているのだから、別にgcalapiが悪いわけじゃないと思うのですが。はまったので一応メモということで。
こういうのを調べるとき、原因がgcalapiや自分のアプリにあるのか、それともGoogleCalendarにあるのか切り分けるために、gcalapiがポストしたデータを見る方法ってないものでしょうか。パケットキャプチャ以外で。