mhc2gcal Archives

MHC のスケジュールを Google Calendar にアップロードするスクリプト

mhc2gcalに関する記事

MHC のスケジュールを Google Calendar にアップロードするスクリプトです.
Ruby で書かれています.

準備:設定ファイルの作成

デフォルトではスクリプトと同じディレクトリの「.gcal」というファイルを参照するようになっていますので,以下の内容で「.gcal」というファイルを作成してください.

# 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
# sync mode (delete or keep)
gcal_mode: keep

gcal_feed は Google Calendar のカレンダーの個人用 URL というもの.カレンダーの詳細から見ることができる.ただし private の部分と full の部分は,違う書式になっていると思うので,こちらを参考にして,書き込みのできる URL に修正.
gcal_mail は Google Calendar にアクセスするためのメールアカウント.おそらく Gmail のアカウントだったりするのではなかろうか.
gcal_pass は Google Calendar にアクセスするためのパスワード.これも同上.

gcal_mode は注意が必要.
mhc2gcal は,後述のコマンドラインオプションなどで指定された期間に,設定ファイルの gcal_feed で指定された Google Calendar に登録されているイベントと,ローカルの MHC に登録されているイベントとを比較し,以下の処理を行います.

  • Google Calendar と MHC の両方に登録されているイベントに関しては,何もしない.
  • MHC にのみ登録されているイベントに関しては,Google Calendar に新たにイベントを作成する.
  • Google Calendarにのみ登録されているイベントに関しては,以下の処理を行う.
    • gcal_mode の値が delete の場合は,Google Calendar から削除する.
    • gcal_mode の値が keep の場合は,Google Calendar から削除せずに残す.
なお,gcal_modeの値が delete でも keep でもない設定にするとエラーになります.

mhc2gcal は MHC から Google Calendar への一方的な登録のみを実現したくて作成したものです.Google Calendar に登録されているイベントを考慮しないため,Google Calendar 側のイベントを削除せずに何度も実行すると,イベントが重複して登録されてしまいます.これを防ぐため,当方は以下のような利用方法を想定しています.

  1. MHC のスケジュールを登録するだけのカレンダーを Google Calendar に追加する.
  2. このカレンダーは,Google Calendar のインタフェースなどからは閲覧するだけでイベント登録はしないようにします.
  3. その上で,そのカレンダーの個人用 URL を gcal_feed に, gcal_del の値を delete に設定して使用する.
当方では上記のような利用方法で,特に問題なく動作しています.

コマンドラインオプション

コマンドラインオプションは以下の通りです.なお --help オプションで実行すると,以下の一覧が表示されます.

  --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'
  --description        add description.
  --verbose            verbose mode.
  --proxy-addr=addr    set the address of http proxy.
  --proxy-port=port    set the port number of http proxy.
  --proxy-user=user    set the username of http proxy.
  --proxy-pass=pass    set the password of http proxy.
  --version            display the version of mhc2gcal and exit.

ベースとなった mhc2ical と同じ部分が多いです.(詳細現在執筆中)

イベント情報を隠すオプションについて.--secret オプションでカテゴリを指定することによって,特定のカテゴリのイベントを SECRET というタイトルのイベントで登録するようになります.これは,Google Calendar を使ってスケジュールを他人に公開(共有)することを目的にしたコマンドで,イベントの詳細は隠したいけれど,時間は埋まっていますよ,という意思表示を示すのに作りました.

イベント詳細追記のオプションについて.--description を指定すると,イベントに詳細が追加されます.詳細の書式などに関しては,白井さんが追加してくださったものをそのまま採用させていただきました.

スクリプトを実行中に何の処理をしているかを表示するオプションについて.--verbose を指定すると,どのイベントを削除したのか,どのイベントを登録したのか,という情報が表示されます.動作の確認などにご活用ください.

プロキシ設定のオプションについて.--proxy-addr=addr と --proxy-port=port が指定されていると,そのIPアドレス(あるいはホスト)とポート番号をプロキシとして使用します.どちらかが欠けてたら使用しません.次に --proxy-user=user と --proxy-pass=pass が指定されていると,それらをユーザ名およびパスワード名としてプロキシの認証に使います.これもどちらかが欠けていると認証は有効になりません.
ちなみに実行時には,プロキシおよびプロキシ認証の有無に応じて以下のような表示があります.

プロキシ未使用時
Connect to Google Calendar directly
プロキシ使用時(認証なし)
Connect to Google Calendar through proxy(addr:port)
プロキシ使用時(認証あり)
Connect to Google Calendar through proxy(user:pass@addr:port)

ご確認ください.

実行例

たとえば以下のように実行します.何が起きるかは後述.

ruby mhc2gcal.rb --date=today+90 --category="!todo !done !holiday" --secret="private"

上記のようなオプション指定の場合は,以下のように動作します.

  • 実行当日から90日分のスケジュールを登録する.
  • カテゴリが todo done holiday のイベントは含めない.
  • カテゴリが private のイベントを secret に指定してタイトルを隠す.

最新バージョン

最新の mhc2gcal のバージョンは 0.3.0 です.
こちらからダウンロードできます.

依存関係

gcalapi 0.1.1 にて動作確認.

mhc2gcalに関する記事一覧
mhc2gcal 0.3.0 リリース
久々に mhc2gcal をアップデートしました.主な変更点は以下の通り. 指定...
2008年08月19日20時00分
mhc2gcal 0.2.1 を gcalapi 0.1.1 で動作確認
gcalapi 0.1.1 がリリースされていたので,導入して試してみたところ,...
2008年03月27日02時03分
mhc2gcal 0.2.1 リリース
0.2.0 リリース後,白井さんに作っていただいた patch を適用したものを...
2008年03月08日14時24分
Patch for gcalapi 0.1.0 : イベントが削除できない問題対策
mhc2gcal の 0.2.0 をリリースした矢先に,イベントが削除できないと...
2008年02月19日00時26分
mhc2gcal 0.2.0 リリース
リリースしてからすっかり放置プレイ状態の mhc2gcal ですが,ご要望いただ...
2008年02月15日02時27分
mhc2gcal : イベント削除時のバグ修正
先月作成した mhc2gcal ですが,指定した期間のイベントを Google ...
2007年05月08日01時35分
mhc2gcal : MHC のスケジュールを Google Calendar にアップロード
スケジュールの共有に Google Calendar を使うことになり,当初は ...
2007年04月13日01時14分