ページ

2010年9月1日

gdataでGoogle Calendarにイベントの登録

登録は後で書こうと思っていて、プログラムができてしまうといつしか忘れるものです。なので、ちょっとだけメモ。コードはめんどいので実際の僕の書いたコードをそのまま。

1. 登録

container = "/calendar/feeds/%s/private/full" % cal_id
GDATA_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.000Z"

new_evt = gdata.calendar.CalendarEventEntry()
new_evt.title = atom.Title(text=cal["summary"])
new_evt.content = atom.Content(text=cal["description"])
new_evt.where.append(gdata.calendar.Where(value_string=cal["location"]))
new_evt.uid = gdata.calendar.UID(value=cal["uid"])

dts = cal["dtstart"]
dte = cal["dtend"]
# TimeZoneをごにょごにょしてdtstartとdtendをGMTでセット
    
start_time = dtstart.strftime(GDATA_DATETIME_FORMAT)
end_time =  dtend.strftime(GDATA_DATETIME_FORMAT)
new_evt.when.append(
    gdata.calendar.When(
        start_time = start_time,
        end_time = end_time))
evt = self.client.InsertEvent(new_evt, container)



containerのcal_idでどのカレンダーにイベントを登録するか指定できます。defaultにしとけば、デフォルトのカレンダーに登録されます。あとは、うーん、あんまり面白くないです。

startとendのフォーマット指定がよくわかりません。なにも考えないとGMTになります。フォーマットの000Zのところをいじくれば、ローカルタイムになってくれそうな気もしますが、自前でGMTに変換する方が楽だったのでGMTで指定しています。

で、uidですが、ドキュメントには、

Indicates the globally unique identifier (UID) of the event as defined in Section 4.8.4.7 of RFC 2445.

Must be a globally unique string and must follow specifications in Section 4.8.4.7 of RFC 2445.

とあります。多分、外部のツールが識別用に与えてもいいものだと信じて使っています。

2. 更新

InsertEventがUpdateEvent(event.GetEditLink().href, event)になるだけです。eventは検索したりして取得したイベントのオブジェクトです。それだけです。


あとは、処理をするときに緑色のスレッドを複数動かして並立すれば、とりあえずの目標は達成だな。次はexchangeだ。

0 件のコメント: