ページ

2010年8月26日

pythonでgdata

googleさんのgdataを使ってGoogle Calendarをごにょごにょしてみました。gdataのAPIはversion 2.0と1.0の二つあるみたいです。version2.0はJavaと.netしか言語をサポートしていません。Pythonは1.0系しかないです。ちょっと悲しいですが、できることがそれほど大きく変わる訳じゃないので、気にしません。

さて、インストールはやっぱりいつものeasy_install gdataです。でも、ソースコードをダウンロードしてsampleディレクトリをみると、だいたいAPIの仕組みがわかります。よいサンプルコードです。すばらしいです。さて、それじゃ、順番に。

1. ログイン

import gdata.calendar.service

client = gdata.calendar.service.CalendarService()
client.email = "my_google_email_id"
client.password = "my_password"
client.ProgrammaticLogin()

です。ちょっと、4行目、5行目あたりがきもいですが、気にしません。

2. カレンダーの一覧を取得

feed = client.GetOwnCalendarsFeed()
for calendar in feed.entry:
    print calendar.title.text

これだけです。かえってくるものはatomです。atomのフォーマットができた頃は、こんな無意味に汎用的なもの、誰が使うんだ?blogの更新に特化しておけばいいのに・・・、と思っていましたが、gdataをみていると僕の考えは浅はかでした。

3. カレンダーのエントリーを取得

feed = client.GetCalendarEventFeed()
for event in feed.entry:
    print event.title.text

これで、デフォルトカレンダーの予定の一覧がとれて出力されます。calendarの一覧の取得方法と対比すると、フォーマットなどが類推しやすいですね。

さて、特定のカレンダーの中のエントリを取得するにはどうするんだろう?と言うことで、ドキュメントらしきものを読みましたがわかりません。GetCalendarEventFeedのuriのデフォルト引数をみると/calender/feeds/default/private/fullとなっています。多分defaultをカレンダーのIDを指定すればいいはず。あらかじめわかっている場合はそれを直接書けばいいですが、カレンダーの一覧から適当に選んだものを指定したいので、どうしよう?

ということで、

cal_id = calendar.id.text
cal_id = cal_id[cal_id.rindex("/")-1:]
feed = client.GetCalendarEventFeed("/calendar/feeds/%s/private/full" % cal_id)

としました。ちょっと違和感がありますが、まあよしとしましょう。目的の動作ができました。

0 件のコメント: