2007年04月13日(金)
mhc2gcal : MHC のスケジュールを Google Calendar にアップロード
スケジュールの共有に Google Calendar を使うことになり,当初は MHC で管理しているスケジュール情報を mhc2ical を使って iCal 形式のファイルに出力し,ブラウザからインポート作業をしていたのだが,なんとも面倒なので自動化することにした.
自動化といっても,出力したファイルをインポートする作業を,ブラウザをエミュレートするライブラリなどで自動化するだけではぬるい(というか,それはそれで自分の力量ではすぐにできるわけではなさそうだが)と考え,思い切って Google Calendar Data API を使って MHC のスケジュールを Google Calendar に直接登録することを企んだ.
MHC は Ruby からいろいろといじれるようにライブラリが用意されている.そこで Google Calendar Data API も Ruby で使うことができれば,一気に解決するのではないかと考え,検索してみたところ RubyForge に gcalapi を発見.早速 gem でインストール.これで環境は整った.
で,完成したスクリプトが,その名も mhc2gcal という安直なネーミング.名前が mhc2ical からインスパイアされており,またプログラムもベースにさせていただいた.また gcalapi の example ディレクトリに入っていた ol2gcal も参考にさせていただいた.
2008年08月19日追記:最新版の使い方はこちらをご参照ください.
2009年10月26日追記:最新版の使い方はこちらをご参照ください.
というわけで mhc2gcal.rb はこちら.
まずは設定.上記スクリプト内の該当部分を,各自の環境に合わせて変更.
# google calendar Feed URL GCAL_FEED = "http://www.google.com/calendar/feeds/XXXXXXXXXXXXXXXX@group.calendar.google.com/private/full" # email address GCAL_MAIL = "XXXXXXXXXX@gmail.com" # password GCAL_PASS = "XXXXXXX" # delete events in the period of date from google calendar GCAL_DEL = false
GCAL_FEED は Google Calendar のカレンダーの個人用 URL というもの.カレンダーの詳細から見ることができる.ただし private の部分と full の部分は,違う書式になっていると思うので,こちらを参考にして,書き込みのできる URL に修正.
GCAL_MAIL は Google Calendar にアクセスするためのメールアカウント.おそらく Gmail のアカウントだったりするのではなかろうか.
GCAL_PASS は Google Calendar にアクセスするためのパスワード.これも同上.
GCAL_DEL は注意が必要.この値を true にすると,後述のコマンドラインオプションなどで指定された期間のイベントを Google Calendar から削除します.デフォルトでは GCAL_DEL の値は false にしてあります.よく理解した上でご利用下さい.
mhc2gcal が MHC から Google Calendar への一方的な登録のみを実現したくて作成したものです.Google Calendar に登録されているイベントを考慮しないため,何度も実行するとイベントが重複して登録されてしまいます.これを防ぐため,当方は以下のような利用方法を想定しています.
- MHC のスケジュールを登録するだけのカレンダーを Google Calendar に追加する.
- このカレンダーは,Google Calendar のインタフェースなどからは閲覧するだけでイベント登録はしないようにします.
- その上で,そのカレンダーの個人用 URL を GCAL_FEED に, GCAL_DEL の値を true に設定して使用する.
当方では上記のような利用方法で,特に問題なく動作しています.
次に,コマンドラインオプションの一覧.
--help show this message. --category=CATEGORY pick only in CATEGORY. '!' and space separated multiple values are allowed. --secret=CATEGORY change the title of the event to 'SECRET' space separated multiple values are allowed. --date={string[+n],string-string} set a period of date. string is one of these: today, tomorrow, sun ... sat, yyyymmdd, yyyymm, yyyy yyyymm lists all days in the month and yyyy lists all days in the year. list n+1 days of schedules if +n is given. default value is 'today+0'
ベースとなった mhc2ical と同じ部分が多い.新たに追加した機能として,スケジュールを他人と共有することを目的として作成したので,あるイベントの詳細は隠したいけど,時間が埋まっていますよ,という部分を示すために,特定のカテゴリのイベントを SECRET というタイトルのイベントで登録するようにした.コマンドラインオプションでは --secret オプションで指定する.
最後に,使い方の例.
$ ruby mhc2gcal.rb --date=today+90 --category="!todo !done !holiday" --secret="private"
上記のようなオプション指定で,以下のように動作する.
・実行当日から90日分のスケジュールを登録する.
・カテゴリが todo done holiday のイベントは含めない.
・カテゴリが private のイベントを secret に指定してタイトルを隠す.
とまぁ,こんな感じ.本来であれば,両方向の同期を実現したいところだが,自分の利用方法としては今の仕様で十分だったので,とりあえず開発終了.
なお,このスクリプトを使用する際は,使用方法などをよく把握し,またスクリプト内で何が行われるのかを理解した上で,ご利用いただけますよう,お願い申し上げます.このスクリプトを使用して何らかの問題が生じた場合,当方は責任を負いませんので,ご了承下さい.自己責任でお願いします.