gcalapiで”Invalid date/time value”(GoogleCalendar::EventInsertFailed)

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がポストしたデータを見る方法ってないものでしょうか。パケットキャプチャ以外で。


コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です