はてブコメントに日時を書くと hCalendar を生成する Greasemonkey スクリプト

個人的にはすごく便利なのですがこんなの自分以外誰も使わないだろうという気がしてきたので適当に書きます。

用語

ブックマークページ: ある URL に対して複数のユーザのブックマークコメントが並ぶページ(http://b.hatena.ne.jp/entry/{URL})のこと
dt: DateTime の略

経緯など

  • hCalendar というイベント情報用のマイクロフォーマットがある
  • Firefox のアドオン Operator を使うと、ページ内の hCalendar を検出して Googleカレンダーにそのまま登録できたりして便利
  • しかし、イベント告知などのページでは hCalendar が埋め込まれていないことが多い(hCalendar の普及がいまいち)
  • "2010-11-20 10:00--2010-11-20 15:00" などと長々とキーボードで入力したりマウスでフォームに入力するのは面倒だが、 "11/20 1000--1500" のような簡易な記法なら手動で入力してもいいかな、と思える。許容範囲内
  • ブックマークページに誰かが入力してれば自分もそれを利用できる、というようにすればさらに楽ができて良い(が、これは hCalendar 的によろしくないようなので不可)
  • ブックマークページには、 hCalendar の summary, description, url に使える情報がある。あとは日時だけあれば必要な情報が揃う
  • そこで、日時だけ簡易な記法で手入力し、Greasemonkey で必要な情報を集めて hCalendar に変換すれば、あとは Operator などのアプリケーションから利用できる

要するに、告知ページなどに hCalendar が埋め込まれていない場合に、なるべく横着してイベント情報をカレンダーアプリに登録したいわけです。

使い方

  1. Greasemonkey スクリプトをインストール
  2. ブックマークページでコメント欄に


    のように記入して [OK] をクリックしコメントを登録する。

  3. (必要なら)ブックマークページを再読み込みさせる

  4. あとは Operator で Googleカレンダーに登録するなど、好きなように使う

「とりあえず使ってみる」だけならここまでの情報で十分だと思います。

以下は、もうちょっと詳しい説明です(なので、最初は見なくてもいいと思います)。

詳しい書式

<dt: {開始日時}>
<dt: {開始日時}--{終了日時}>
<dt: {開始日時}+{継続時間}>

という書式で日時を入力する。
開始・終了の両方とも指定する場合は "--" で区切る。

日時の書式

■ 年月日のみ

"2010-01-02"
"2010/01/02"
"2010.01.02"
"20100102"

年を省略した場合は現在の年であると見なす。

"01/02", "01-02", "01.02" => 2010-01-02 00:00

数字4桁だけの場合は現在の年月日 + HHMM と見なす。
年や月日とは見なさない。

"2010" => {現在の年月日} 20:10

■ 時刻のみ

"12:34" または "1234" => {現在の年月日} 12:34

■ (年)月日 + 時刻

(年)月日と時刻は半角スペース " " で区切る。

"2010-01-02 12:34"

(年)月日だけの場合、時刻は 00:00 と見なす。

"2010-01-02" => 2010-01-02 00:00

# parseHM の引数 isEnd が true の場合は 23:59

■ 不正な入力の例

"123"
"12121"
"abc"
"12 34"
継続期間の書式

数字 + [dhm]

5d  => 5日間
3h  => 3時間
90m => 90分 = 1.5時間

3h10m のような書き方はできません。

おまけ

場所も指定したい場合は

<at: {場所}>

で。
これは必須ではありません。

これがあればサイト側で hCalendar を用意しなくていいの?

そんなことはありません。
このスクリプトで生成された hCalendar はこのスクリプトをインストールしているユーザにしか見えません。Google などの各種ロボットにも拾われません。このスクリプトの位置付けは「イベント告知などをを行うサイト側で用意されていない場合に仕方なく使う」というものです。

追記

2010年 11月 20日 土曜日 16:15:39 JST
自分のコメントだけでなく他のユーザのコメントも使うようにしました。