2008年02月15日(金)

mhc2gcal 0.2.0 リリース

mhc2gcalに関するりばにしの記事

リリースしてからすっかり放置プレイ状態の mhc2gcal ですが,ご要望いただいていた proxy 対応と verbose モード,およびご提案いただいていた description の有無を選択できるようにしたものを,バージョン 0.2.0 として作成しました.

2008年08月19日追記:最新版の使い方はこちらをご参照ください.
2009年10月26日追記:最新版の使い方はこちらをご参照ください.

というわけで mhc2gcal.rb はこちら.

前のバージョン(以前のものには番号が振られていなかった・・・)からの変更点について.

まず,ユーザ設定についてはスクリプトファイルに含めずに,外部の yaml ファイルに書き込む形式に変更しました.デフォルトではスクリプトと同じディレクトリの「.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」「gcal_mail」「gcal_pass」については,小文字になった以外は前回と同様.

変更点かつ注意点は「gcal_mode」で,これを「delete」とすると Google Calendar のデータを削除する,「keep」とすると削除せずにキープする,という仕組みになっています.どちらでもないと設定エラーになります.このような仕様になっている理由はこちらのエントリをご参照ください.

次に,コマンドラインオプションについて.

  --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.

まず proxy 対応について.オプションで --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)

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

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

最後に個人的な使い方の例.当方は MacOSX (Leopard) 環境下でこのスクリプトを使っているのですが,プロキシの設定が zsh の環境変数には引き継がれません.なんとか反映させたいと思い,以下のようなスクリプトで動作させています.

#!/bin/sh
SCUTIL=/usr/sbin/scutil
GREP=/usr/bin/grep
PERL=/usr/bin/perl
RUBY=/usr/bin/ruby
MHC2GCAL_DIR=/path/to/mhc2gcal/dir
PROXY_ENABLE=`$SCUTIL --proxy | $GREP "HTTPEnable" | $PERL -pe 's/^.*HTTPEnable : (.*)$/$1/'`
if [ $PROXY_ENABLE -eq 1 ]
then
  PROXY_ADDR=`$SCUTIL --proxy | $GREP "HTTPProxy" | $PERL -pe 's/^.*HTTPProxy : (.*)$/$1/'`
  PROXY_PORT=`$SCUTIL --proxy | $GREP "HTTPPort" | $PERL -pe 's/^.*HTTPPort : (.*)$/$1/'`
fi
cd $MHC2GCAL_DIR
if [ $PROXY_ENABLE -eq 1 ]
then
  $RUBY ./mhc2gcal.rb --date=today+60 --category="!todo !done !holiday !birthday" --secret="private" --verbose --proxy-addr="$PROXY_ADDR" --proxy-port="$PROXY_PORT"
else
  $RUBY ./mhc2gcal.rb --date=today+60 --category="!todo !done !holiday !birthday" --secret="private" --verbose
fi

結構満足.

2008年02月15日02時27分 | Permalink
Trackback
Trackback URL
Comment

いつも重宝させていただいております。

これはmhc2gcalのせいではないとおもっていますが、
このところ削除がうまくいかないでスクリプトが止まってしまっています。

$ ruby mhc2gcal-0.2.0.rb –verbose –date=20080201-20080301
Connect to Google Calendar directly
Connect as XXXX@gmail.com
Delete events from Google Calendar
/usr/lib/ruby/gems/1.8/gems/gcalapi-0.1.0/lib/googlecalendar/event.rb:152:in `destroy!’: Not Deleted (GoogleCalendar::EventDeleteFailed)
from mhc2gcal-0.2.0.rb:219
from mhc2gcal-0.2.0.rb:215:in `each’
from mhc2gcal-0.2.0.rb:215

でも、keepで試すと登録はできているのですよね…。
なにかご存知でしたら、ご教授願えればと。

kuboaki at 2008年02月17日18時10分

kuboakiさん

コメントありがとうございます.
こちらでも慌てて動かしてみたところ,エラーが出ました.
いろいろ調べて,自分なりの対応策を以下のエントリに記載しました.
http://nao.river24.net/blog/entry/20080219002630
これで解決すれば幸いです.

りばにし at 2008年02月19日00時30分

こんにちは、白井です。

あれ? mhc2gcal で Google calendar の delete が出来ないなぁ、と悩んで調べたところ mhc2gcal.rb ver.0.2.0 を発見しました。いろいろと改良ありがとうございます。

# delete の解析も大変助かりました。感謝、感謝です。

さて、早速新しい mhc2gcal を使ってみたのですが YAML file の扱いで二点ほど気になった点があります。

・スクリプトと同じディレクトリの .gcal を参照となっていますが、ぼくの環境ではすべて、mhc2gcal を起動したカレントディレクトリを見に行っているようです。

・YAML file にメールアドレスなどを書きますが、複数の設定を使い分けるときが面倒です。オプションで指定できた方が便利かと思います。

ともに、一皮 shell script をかぶせれば解決できる問題ですが、折角なのでパッチにしてみました。
コメントでパッチを書くとどうなるのかわからないので、

http://www.meadowy.org/~shirai/tmp/mhc2gcal.diff

に置いておきました。検討していただけると幸いです。

白井 at 2008年02月21日17時56分

白井さん

YAMLファイルの扱いについて,ご指摘・ご提案ありがとうございます.
是非このパッチを適用させていただきたいと思います.

自分で書いたスクリプトにパッチをいただいた場合って,
それを適用したものを公開するときに,
パッチの作者の情報などをどうすればいいのか,
全然わかっていないのですが,どんなもんかご存知でしょうか?
# 前回ご提案いただいたDescriptionについては,
# そのまま入れてしまいましたが・・・.

りばにし at 2008年02月28日01時28分

>> 是非このパッチを適用させていただきたいと思います.

ありがとうございます。

>> パッチの作者の情報などをどうすればいいのか,ご存知でしょうか?

うーむ、

(1) ChangeLog があるようならそこに書く。
(2) script 中にコメントで “thank you” って書く。
(3) 気にしない。

というパターンがあると思いますが、この程度のパッチだったら (3) の気にしない、でよいんじゃないかと思います。パッチ書いた人間にとっては、採用していただけた!ということが一番うれしいことですからね 🙂

白井 at 2008年02月29日17時41分

白井さん

コメントありがとうございます.
とりあえずは (3) の気にしないで進めさせていただきます:)
今後,ChangeLogやgcalapiへのパッチなども含めた形で
公開できるように整備したいと思います.

りばにし at 2008年03月07日13時46分
Comment Form

▶次の記事:夕焼け from 冬の研究室
◀前の記事:おかめ