ページ

2010年8月27日

gdataでGoogle Calendarのイベントの検索とデータの登録、ついでに削除

ふざけたタイトルのエントリですが、昨日の続きです。

1. 検索

昨日のエントリでは、カレンダーのイベントの取得は、GetCalendarEventFeedを使って取得しました。この人はお手軽なんですが、取得した一覧がどういうものかよく分かりません。まず、このAPIはデフォルトでは25件しか結果を返しません。これはmax_resultsで制御できるようです。続きを取得したければ、eventのGetNextLinkを使えと書いています。このへんの制御は負荷の問題もあるのでしかたないです。取得する25件がどういう順番なのかわからないのが不満です。ドキュメントを読めば書いてあるかもしれませんが、無意味に全部そうなめしてもうれしくありません。前後ひと月分のデータをハンドリングしたいだけなので、期間を限定して取得します。

query = gdata.calendar.service.CalendarEventQuery(calendar_id, "private", "full")
now = time.time()
query.start_min = time.strftime("%Y-%m-%d", time.gmtime("%Y%m%e", now))
query.start_max = time.strftime("%Y-%m-%d", time.gmtime("%Y%m%e", now+60*60*24*31))
query.max_results = 256
feed = self.client.CalendarQuery(query)

これで、feed.entryにひと月分入っています。256件超えるとその分はとれませんが、そんなに僕は忙しくないので気にしません。

2. ついでに削除

まあ、削除は簡単です。

event = feed.entry[0]
client.DeleteEvent(event.GetEditLink().href)

client.DeleteEvent(event)とかの方がスマートに思いますが、まあ、ほかのところもこんな感じなのでなれるしかありません。

3. データの登録

データの登録はめんどくさいので明日。


それ以外で、あるカレンダーとGoogle Calendarでデータのマッピングをどうするかで、icalのuidとgoogleのeventのidをマッピングすればいいのですが、そのためにはマッピングテーブルを別に持たないといけません。マルチスケジューラ、通称マルスケはマッピングテーブルを外部に持っています。gdataのcalendarにはuidがあるので、それでマッピングできると思ったのですが、どうなんでしょう?あと、googleのイベントのlinkにicalのurlを持たせてマッピングしようかと思ったのですが、こっちはますますよくわかりません。

ということで、のんびりと遊んでいます。いや、お仕事がなぜか忙しんだが・・・。誰かの呪いに違いない。

0 件のコメント: