きっかけ
グループウェアで、自分を含む予定が登録されるとメールで通知が届く。グループウェアのカレンダーはセキュリティポリシーのため社内でしか見られないので、個人のカレンダー(Google Calendar や OS X のカレンダーアプリ)に登録するのを手動でやっていたが、結構頻度が有るので自動化しようと、AppleScriptを書いた。
スクリプトの説明
メール本文から必要な情報を抜き出して、それぞれの変数に形式を合わせてセットする。
メール本文のデータをスクリプトに渡す方法は、クリップボードにコピーして行っているが、メールの形態はグループウェア毎に違うので、ここでは紹介しない。 参考として、ソースの冒頭のコメントで変数名とデータ形式を書いておく。
Googleカレンダーに登録するソース
Googleカレンダーには、標準のブラウザを使って直接Googleカレンダーのイベント登録画面を表示して入力フィールドにデータをセットするスクリプト。
SetGoogleCal.scpt
-- Googleカレンダーにイベントを登録する AppleScript
-- イベント名: Summ (SJIS)
-- 場所: Loc (SJIS)
-- 開始時刻と終了時刻:Datetime (yyyymmddThhmmss/yyyymmddThhmmss)
--
on urlEncode(inData) -- URLエンコード(%エンコード)
-- 文字コードを utf8 としてエンコードしたい場合は、「as «class utf8»」で変換したものを渡すこと。
set scpt to "php -r 'echo rawurlencode(" & quote & inData & quote & ");'"
return (do shell script scpt) as string
end urlEncode
set escSumm to urlEncode(Summ as «class utf8»)
set escLoc to urlEncode(Loc as «class utf8»)
set CalURL to "http://www.google.com/calendar/event?action=TEMPLATE&src="
set CalURL to CalURL & "<<登録するカレンダーID>>@group.calendar.google.com"
set CalURL to CalURL & "&text=" & escSumm
set CalURL to CalURL & "&dates=" & Datetime
set CalURL to CalURL & "&location=" & escLoc
open location CalURL
カレンダーアプリ(Calendar)に登録するアプリ
カレンダーアプリにイベントを登録して、そのウインドウを表に表示するスクリプト。
SetCal.scpt
-- イベント名: Summ (SJIS)
-- 場所: Loc (SJIS)
-- 開始時刻:sDate (yyyy/mm/dd hh:mm:ss)
-- 終了時刻:eDate (yyyy/mm/dd hh:mm:ss)
--
set sDate to date sDate -- 日時データの文字列(yyyy/mm/dd hh:mm:ss)を dateクラスに変換
set eDate to date eDate
tell application "Calendar"
set newEvent to make new event at end of events of calendar "<<登録するカレンダーの名前>>" with properties {summary:Summ, location:Loc, start date:sDate, end date:eDate}
activate
end tell