読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

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日を足すという適当なことをしているため