YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

ATNDからGoogle Calendarに自動で登録するスクリプトを書いた

いきさつ

Python温泉 #6で@yoshioriが「自動化できるところは自動化しないとー」と言っていて「たしかに!」と思ったので思いついた自動化をしてみようと考えた。でもって、ATNDでイベント登録して忘れてることがちょいちょいあるので忘れないようにGoogle Calendarに自動で登録できるようにしてみた。

使い方

Google CalendarのEmailアドレスとパスワード、あとATNDのユーザIDを渡してあげます。

$ python atnd2gcal.py -e <email address> -p <password> -a <atnd user id>

おおむね向こう2ヶ月分のイベントを持ってきてくれるはずです。*1

既知の問題

削除されたイベントが返ってきてしまう

上記のコードではもし同一の名前のイベントが同じ日にカレンダーに登録されてたら更新、なかったら新規作成というように判断しています。しかし一回登録されたイベントをGoogle CalendarのWeb UIから削除しても、gdata-python-clientのcalendar_service.CalendarQueryは削除されたはずのイベントを取ってきてしまうのです。
そのため存在しないはずのイベントを更新するためステータスコードは200が返ってきていても実際は作成されていないという状況になります。これはgdata-python-clientのバグだと思っているのですが、もし回避策を知っている方がいたら教えてください。

返されるべきイベントが返されない

これは確実にATND APIのバグです。ymオプションを指定してイベントリストを取得すると、たまにリストからイベントが漏れます。自分の場合だとjava-ja忘年会がなぜかリストから漏れました。

まとめ

まあバグはあるもののある程度動いてるんでcronにつっこんでおきます。こういう自動化をするのは楽しいですね。

*1:Python標準ライブラリのdatetimeモジュールでは1ヶ月後などの処理が面倒なため30日を足すという適当なことをしているため