<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>りばにしの戯言 &#187; mhc2gcal</title>
	<atom:link href="http://nao.river24.net/blog/category/mhc2gcal/feed/" rel="self" type="application/rss+xml" />
	<link>http://nao.river24.net/blog</link>
	<description>river24のriver24によるriver24のためのblog</description>
	<lastBuildDate>Tue, 07 Feb 2012 17:00:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/category/mhc2gcal/feed/" />
		<item>
		<title>mhc2gcal 0.4.0</title>
		<link>http://nao.river24.net/blog/entry/20091026220928/</link>
		<comments>http://nao.river24.net/blog/entry/20091026220928/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 13:09:28 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.net/blog/?p=2100</guid>
		<description><![CDATA[だいぶ前になりますが，mhc2gcalのソース管理をgithubに移行するとともに，0.4.0をリリースしていました． 修正点は非常に些細なことですが，以下の通りです． 設定ファイルを指定しなかった際に参照するYAMLフ [...]]]></description>
			<content:encoded><![CDATA[<p>だいぶ前になりますが，<a href="http://github.com/river24/mhc2gcal">mhc2gcalのソース管理をgithubに移行するとともに，0.4.0をリリース</a>していました．</p>
<p>修正点は非常に些細なことですが，以下の通りです．</p>
<ul>
<li>設定ファイルを指定しなかった際に参照するYAMLファイルの名前を変更</li>
</ul>
<p>なお，gcalapi 0.1.2に対して<a href="http://nao.river24.net/blog/entry/20090331005716">このpatch</a>を適用しないとエラーが出るんじゃないかと思います．次期リリースにはこのpatchも含めるようにするべきなのかな？</p>
<p>0.5.0（予定）では，設定ファイル内のパスワードをBase64でエンコードするようにします．やればすぐ完了すると思いますが，ちょっとお待ちください・・・．</p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20091026220928/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20091026220928/" />
	</item>
		<item>
		<title>gcalapi 0.1.2 への patch</title>
		<link>http://nao.river24.net/blog/entry/20090331005716/</link>
		<comments>http://nao.river24.net/blog/entry/20090331005716/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 15:57:16 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://www.heavenwolf.org/blog/?p=1709</guid>
		<description><![CDATA[Google Calendar の Feed に新たな名前空間が追加されたためか，自分が使っている mhc2gcal がエラーを吐くようになっていた． mhc2gcal で使っている gcalapi の calendar [...]]]></description>
			<content:encoded><![CDATA[<p>Google Calendar の Feed に新たな名前空間が追加されたためか，自分が使っている mhc2gcal がエラーを吐くようになっていた．</p>
<p>mhc2gcal で使っている gcalapi の calendar.rb に以下のパッチをあてて動くようになった．</p>
<pre class="codescroll">--- calendar.rb.0.1.2   2007-02-19 00:08:31.000000000 +0900
+++ calendar.rb 2009-03-30 10:37:47.000000000 +0900
@@ -60,6 +60,10 @@
       REXML::Document.new(ret.body).root.elements.each("entry"){}.map do |elem|
         elem.attributes["xmlns:gCal"] = "http://schemas.google.com/gCal/2005"
         elem.attributes["xmlns:gd"] = "http://schemas.google.com/g/2005"
+        elem.attributes["xmlns:openSearch"] = "http://a9.com/-/spec/opensearchrss/1.0/"
+        elem.attributes["xmlns:gml"] = "http://www.opengis.net/gml"
+        elem.attributes["xmlns:georss"] = "http://www.georss.org/georss"
+        elem.attributes["xmlns:batch"] = "http://schemas.google.com/gdata/batch"
         elem.attributes["xmlns"] = "http://www.w3.org/2005/Atom"
         entry = Event.new
         entry.srv = @srv</pre>
<p>gcalapi の作者さんにも送っておこう．</p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20090331005716/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20090331005716/" />
	</item>
		<item>
		<title>mhc2gcal 0.3.0 リリース</title>
		<link>http://nao.river24.net/blog/entry/20080819200005/</link>
		<comments>http://nao.river24.net/blog/entry/20080819200005/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 11:00:05 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.org/blog/entry/2003081223071108/08/19/2000.php</guid>
		<description><![CDATA[久々に mhc2gcal をアップデートしました．主な変更点は以下の通り． 指定された期間内の Google Calendar と MHC のイベントを比較するようにし，比較した結果 両方に存在するイベントに関しては，何 [...]]]></description>
			<content:encoded><![CDATA[<p>久々に mhc2gcal をアップデートしました．主な変更点は以下の通り．</p>
<ul>
<li>指定された期間内の Google Calendar と MHC のイベントを比較するようにし，比較した結果</li>
<ul>
<li>両方に存在するイベントに関しては，何もしない</li>
<li>Google Calendar のみに存在するイベントに関しては，設定ファイルの gcal_mode の値に基づいて消すか残すかの処理を行う</li>
<li>MHC のみに存在するイベントに関しては，Google Calendar に追加する処理を行う</li>
</ul>
<li>イベントのタイトルに場所を含めるのをやめた</li>
</ul>
<p>といったところです．</p>
<p>今までは実行するたびに，Google Calendar のイベントを全部消して，MHC のイベントを新たに作成する，という流れになっていたので無駄が多かったのですが，今回は無駄が少なくなったと思います．</p>
<p><span style="text-decoration: line-through;">最新版のダウンドーロおよび使い方はこちらをご参照ください．</span></p>
<p><span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20080819200005/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20080819200005/" />
	</item>
		<item>
		<title>mhc2gcal 0.2.1 を gcalapi 0.1.1 で動作確認</title>
		<link>http://nao.river24.net/blog/entry/20080327020331/</link>
		<comments>http://nao.river24.net/blog/entry/20080327020331/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 17:03:31 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.org/blog/entry/2003081223071108/03/27/0203.php</guid>
		<description><![CDATA[gcalapi 0.1.1 がリリースされていたので，導入して試してみたところ，問題なく動作したようです．これであのパッチも不要になりますた．]]></description>
			<content:encoded><![CDATA[<p>gcalapi 0.1.1 がリリースされていたので，導入して試してみたところ，問題なく動作したようです．これであのパッチも不要になりますた．</p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20080327020331/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20080327020331/" />
	</item>
		<item>
		<title>mhc2gcal 0.2.1 リリース</title>
		<link>http://nao.river24.net/blog/entry/20080308142423/</link>
		<comments>http://nao.river24.net/blog/entry/20080308142423/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 05:24:23 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.org/blog/entry/2003081223071108/03/08/1424.php</guid>
		<description><![CDATA[0.2.0 リリース後，白井さんに作っていただいた patch を適用したものを，新たに 0.2.1 としてリリースしました．白井さん，ありがとうございました！ 2009年10月26日追記：最新版の使い方はこちらをご参照 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nao.river24.net/blog/entry/20080215022700">0.2.0 リリース</a>後，<a href="http://www.meadowy.org/~shirai/tmp/mhc2gcal.diff">白井さんに作っていただいた patch</a> を適用したものを，新たに 0.2.1 としてリリースしました．白井さん，ありがとうございました！</p>
<p><span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20080308142423/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20080308142423/" />
	</item>
		<item>
		<title>Patch for gcalapi 0.1.0 : イベントが削除できない問題対策</title>
		<link>http://nao.river24.net/blog/entry/20080219002630/</link>
		<comments>http://nao.river24.net/blog/entry/20080219002630/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 15:26:30 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.org/blog/entry/2003081223071108/02/19/0026.php</guid>
		<description><![CDATA[mhc2gcal の 0.2.0 をリリースした矢先に，イベントが削除できないというコメントをいただき，当方でも確認してみたところ削除できない模様．ということで調査． Google Calendar との接続に利用させて [...]]]></description>
			<content:encoded><![CDATA[<p>mhc2gcal の 0.2.0 をリリースした矢先に，イベントが削除できないというコメントをいただき，当方でも確認してみたところ削除できない模様．ということで調査．</p>
<p>Google Calendar との接続に利用させてもらっている gcalapi では，イベントを削除する際に DELETE ではなく POST を利用している模様．この手法自体は Firewall などで DELETE が使えない環境向けに用意されている手法らしいので問題なし．<br />
問題は POST を呼び出す do_post メソッドを呼ぶ際に BODY として &#8220;DELETE uri.path&#8221; という文字列が指定されている部分．この部分は，本来 DELETE を使うときと同様，何も入れなくていいのではなかろうか？と推測．試しに空っぽの文字列（という表現であっているのか？）を入れてみたところ，ビンゴ．見事動作しました．</p>
<p>ということで，イベントを削除するメソッドを定義している service_base.rb に以下のパッチを適用することで対処，動くようにはなると思います．（念のため，元の部分はコメントアウトになってます．弱気？）</p>
<pre class="code">*** service_base.rb.0.1.0       2008-01-03 16:49:28.000000000 +0900
--- service_base.rb     2008-02-18 23:00:33.000000000 +0900
***************
*** 98,104 ****
uri = URI.parse(feed)
res = do_post(uri,
{"X-HTTP-Method-Override" => "DELETE"},
!                "DELETE " + uri.path)
logger.info("-- delete en (#{res.message}) --") if logger
res
end
--- 98,105 ----
uri = URI.parse(feed)
res = do_post(uri,
{"X-HTTP-Method-Override" => "DELETE"},
!                  "")
! #                "DELETE " + uri.path)
logger.info("-- delete en (#{res.message}) --") if logger
res
end</pre>
<p>ちなみに，今まで動いていたものが何故急に動かなくなったのかは不明．昔は許可していた仕様が，変更になったのかな？今回のように DELETE の代替として POST を使っているのであれば，その BODY が空欄であるのは至極自然な気はする．</p>
<p><span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20080219002630/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20080219002630/" />
	</item>
		<item>
		<title>mhc2gcal 0.2.0 リリース</title>
		<link>http://nao.river24.net/blog/entry/20080215022700/</link>
		<comments>http://nao.river24.net/blog/entry/20080215022700/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 17:27:00 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://nao.river24.org/blog/entry/2003081223071108/02/15/0227.php</guid>
		<description><![CDATA[リリースしてからすっかり放置プレイ状態の mhc2gcal ですが，ご要望いただいていた proxy 対応と verbose モード，およびご提案いただいていた description の有無を選択できるようにしたものを [...]]]></description>
			<content:encoded><![CDATA[<p>リリースしてからすっかり放置プレイ状態の <a href="http://nao.river24.net/blog/entry/20070413011444">mhc2gcal</a> ですが，ご要望いただいていた proxy 対応と verbose モード，およびご提案いただいていた description の有無を選択できるようにしたものを，バージョン 0.2.0 として作成しました．</p>
<p><span style="font-weight: bold; text-decoration: line-through;">2008年08月19日追記：最新版の使い方はこちらをご参照ください．</span><br />
<span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
<p><span id="more-1208"></span></p>
<div style="text-decoration: line-through;">
<p>というわけで mhc2gcal.rb はこちら．</p>
<p>前のバージョン（以前のものには番号が振られていなかった・・・）からの変更点について．</p>
<p>まず，ユーザ設定についてはスクリプトファイルに含めずに，外部の yaml ファイルに書き込む形式に変更しました．デフォルトではスクリプトと同じディレクトリの「.gcal」というファイルを参照するようになっていますので，以下の内容で「.gcal」というファイルを作成してください．</p>
<pre class="codescroll"># 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</pre>
<p>「gcal_feed」「gcal_mail」「gcal_pass」については，小文字になった以外は前回と同様．</p>
<p><span style="font-weight: bold;">変更点かつ注意点は「gcal_mode」</span>で，これを「delete」とすると Google Calendar のデータを削除する，「keep」とすると削除せずにキープする，という仕組みになっています．どちらでもないと設定エラーになります．このような仕様になっている理由は<a href="http://nao.river24.net/blog/entry/20070413011444">こちらのエントリ</a>をご参照ください．</p>
<p>次に，コマンドラインオプションについて．</p>
<pre class="code">  --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.</pre>
<p>まず proxy 対応について．オプションで &#8211;proxy-addr=addr と &#8211;proxy-port=port が指定されていると，そのIPアドレス（あるいはホスト）とポート番号をプロキシとして使用します．どちらかが欠けてたら使用しません．次に &#8211;proxy-user=user と &#8211;proxy-pass=pass が指定されていると，それらをユーザ名およびパスワード名としてプロキシの認証に使います．これもどちらかが欠けていると認証は有効になりません．<br />
ちなみに実行時には，プロキシおよびプロキシ認証の有無に応じて以下のような表示があります．ご確認ください．</p>
<pre class="code">プロキシ未使用時
Connect to Google Calendar directly
プロキシ使用時（認証なし）
Connect to Google Calendar through proxy(addr:port)
プロキシ使用時（認証あり）
Connect to Google Calendar through proxy(user:pass@addr:port)</pre>
<p>次に description について．オプションとして &#8211;description を指定すると，イベントに詳細が追加されます．詳細の書式などに関しては，<a href="http://ko.meadowy.net/~shirai/diary/20070612.html#p03" target="_blank">白井さんが追加してくださったもの</a>をそのまま採用させていただきました．</p>
<p>そして verbose について．オプションとして &#8211;verbose を指定すると，どのイベントを削除したのか，どのイベントを登録したのか，という情報が表示されます．動作の確認などにご活用ください．</p>
<p>最後に個人的な使い方の例．当方は MacOSX (Leopard) 環境下でこのスクリプトを使っているのですが，プロキシの設定が zsh の環境変数には引き継がれません．なんとか反映させたいと思い，以下のようなスクリプトで動作させています．</p>
<pre class="codescroll">#!/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</pre>
<p>結構満足．</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20080215022700/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20080215022700/" />
	</item>
		<item>
		<title>mhc2gcal : イベント削除時のバグ修正</title>
		<link>http://nao.river24.net/blog/entry/20070508013558/</link>
		<comments>http://nao.river24.net/blog/entry/20070508013558/#comments</comments>
		<pubDate>Mon, 07 May 2007 16:35:58 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://www.heavenwolf.org/blog/?p=1136</guid>
		<description><![CDATA[先月作成した mhc2gcal ですが，指定した期間のイベントを Google Calendar から一度削除するときの挙動がおかしかったので修正してみた．修正したファイルはこちら． おかしかった挙動は，たとえば2007 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nao.river24.net/blog/entry/20070413011444">先月作成した mhc2gcal</a> ですが，指定した期間のイベントを Google Calendar から一度削除するときの挙動がおかしかったので修正してみた．<span style="text-decoration: line-through;">修正したファイルはこちら．</span></p>
<p>おかしかった挙動は，たとえば2007年05月08日から2007年05月09日までを指定して実行すると，期間外であるはずの前日（2007年05月07日）の全日イベントを削除してしまっていた．まだ Google Calendar の API を理解し切れていないところもあるのだが，試行錯誤の結果現在のバージョンであれば，前日の全日イベントを削除しないようになった．</p>
<p>ちなみにイベント削除機能は，スクリプト内の GCAL_DEL の値を true にしていない限り関係ありません．あしからず．</p>
<p>あと，ときどきエラーが出て止まってしまうことがあるのだが原因が掴めていない．ほとんどの場合，もう一度実行するとエラーが出ずに正常終了するのだが・・・．なんじゃろう．ちょっと追っている余裕はないので，とりあえず放置．</p>
<p>最後になりましたが，毎度くどいようですが，このスクリプトを使う場合は自己責任でお願いします．．．（くどい）．</p>
<p><span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20070508013558/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20070508013558/" />
	</item>
		<item>
		<title>mhc2gcal : MHC のスケジュールを Google Calendar にアップロード</title>
		<link>http://nao.river24.net/blog/entry/20070413011444/</link>
		<comments>http://nao.river24.net/blog/entry/20070413011444/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 16:14:44 +0000</pubDate>
		<dc:creator>りばにし</dc:creator>
				<category><![CDATA[mhc2gcal]]></category>

		<guid isPermaLink="false">http://www.heavenwolf.org/blog/?p=1123</guid>
		<description><![CDATA[スケジュールの共有に Google Calendar を使うことになり，当初は MHC で管理しているスケジュール情報を mhc2ical を使って iCal 形式のファイルに出力し，ブラウザからインポート作業をしていた [...]]]></description>
			<content:encoded><![CDATA[<p>スケジュールの共有に Google Calendar を使うことになり，当初は MHC で管理しているスケジュール情報を <a href="http://yuo.nui.org/Works/mhc2ical/?lang=ja" target="_blank">mhc2ical</a> を使って iCal 形式のファイルに出力し，ブラウザからインポート作業をしていたのだが，なんとも面倒なので自動化することにした．</p>
<p>自動化といっても，出力したファイルをインポートする作業を，ブラウザをエミュレートするライブラリなどで自動化するだけではぬるい（というか，それはそれで自分の力量ではすぐにできるわけではなさそうだが）と考え，思い切って Google Calendar Data API を使って MHC のスケジュールを Google Calendar に直接登録することを企んだ．</p>
<p>MHC は Ruby からいろいろといじれるようにライブラリが用意されている．そこで Google Calendar Data API も Ruby で使うことができれば，一気に解決するのではないかと考え，検索してみたところ RubyForge に <a href="http://rubyforge.org/projects/gcalapi/" target="_blank">gcalapi</a> を発見．早速 gem でインストール．これで環境は整った．</p>
<p>で，完成したスクリプトが，その名も mhc2gcal という安直なネーミング．名前が <a href="http://yuo.nui.org/Works/mhc2ical/?lang=ja" target="_blank">mhc2ical</a> からインスパイアされており，またプログラムもベースにさせていただいた．また <a href="http://rubyforge.org/projects/gcalapi/" target="_blank">gcalapi</a> の example ディレクトリに入っていた ol2gcal も参考にさせていただいた．</p>
<p><span style="font-weight: bold; text-decoration: line-through;">2008年08月19日追記：最新版の使い方はこちらをご参照ください．</span><br />
<span style="font-weight: bold;">2009年10月26日追記：最新版の使い方は<a href="http://github.com/river24/mhc2gcal">こちら</a>をご参照ください．</span></p>
<p><span id="more-1125"></span></p>
<div style="text-decoration: line-through;">
<p>というわけで mhc2gcal.rb はこちら．</p>
<p>まずは設定．上記スクリプト内の該当部分を，各自の環境に合わせて変更．</p>
<pre class="codescroll"># 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</pre>
<p>GCAL_FEED は Google Calendar のカレンダーの個人用 URL というもの．カレンダーの詳細から見ることができる．ただし private の部分と full の部分は，違う書式になっていると思うので，<a href="http://code.google.com/apis/calendar/reference.html" target="_blank">こちら</a>を参考にして，書き込みのできる URL に修正．<br />
GCAL_MAIL は Google Calendar にアクセスするためのメールアカウント．おそらく Gmail のアカウントだったりするのではなかろうか．<br />
GCAL_PASS は Google Calendar にアクセスするためのパスワード．これも同上．</p>
<p><span style="colr: blue; font-weight: bold;">GCAL_DEL は注意が必要．</span>この値を true にすると，後述のコマンドラインオプションなどで指定された期間のイベントを Google Calendar から削除します．デフォルトでは GCAL_DEL の値は false にしてあります．よく理解した上でご利用下さい．</p>
<p>mhc2gcal が MHC から Google Calendar への一方的な登録のみを実現したくて作成したものです．Google Calendar に登録されているイベントを考慮しないため，何度も実行するとイベントが重複して登録されてしまいます．これを防ぐため，当方は以下のような利用方法を想定しています．</p>
<ol>
<li>MHC のスケジュールを登録する<span style="font-weight: bold;">だけ</span>のカレンダーを Google Calendar に追加する．</li>
<li>このカレンダーは，Google Calendar のインタフェースなどからは閲覧するだけでイベント登録はしないようにします．</li>
<li>その上で，そのカレンダーの個人用 URL を GCAL_FEED に， GCAL_DEL の値を true に設定して使用する．</li>
</ol>
<p>当方では上記のような利用方法で，特に問題なく動作しています．</p>
<p>次に，コマンドラインオプションの一覧．</p>
<pre class="code">  --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'</pre>
<p>ベースとなった mhc2ical と同じ部分が多い．新たに追加した機能として，スケジュールを他人と共有することを目的として作成したので，あるイベントの詳細は隠したいけど，時間が埋まっていますよ，という部分を示すために，特定のカテゴリのイベントを SECRET というタイトルのイベントで登録するようにした．コマンドラインオプションでは &#8211;secret オプションで指定する．</p>
<p>最後に，使い方の例．</p>
<pre class="codescroll">ruby mhc2gcal.rb --date=today+90 --category="!todo !done !holiday" --secret="private"</pre>
<p>上記のようなオプション指定で，以下のように動作する．<br />
　・実行当日から90日分のスケジュールを登録する．<br />
　・カテゴリが todo done holiday のイベントは含めない．<br />
　・カテゴリが private のイベントを secret に指定してタイトルを隠す．</p>
<p>とまぁ，こんな感じ．本来であれば，両方向の同期を実現したいところだが，自分の利用方法としては今の仕様で十分だったので，とりあえず開発終了．</p>
<p>なお，このスクリプトを使用する際は，使用方法などをよく把握し，またスクリプト内で何が行われるのかを理解した上で，ご利用いただけますよう，お願い申し上げます．このスクリプトを使用して何らかの問題が生じた場合，当方は責任を負いませんので，ご了承下さい．自己責任でお願いします．</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nao.river24.net/blog/entry/20070413011444/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://nao.river24.net/blog/entry/20070413011444/" />
	</item>
	</channel>
</rss>

