2012年2月18日土曜日

Rainmeter, LuaCalendar, Holydays of Google Calendar

Rainmeterで日本の祝日がわかるカレンダーのスキンって,あまり見たことない.というか管見の限り,ないんじゃないかと.
Rainlendar使えとかって話もあるけど,あれだって無料版ではローカルのicalしか読み込めないようだし.
なので,作ってみた.ひな形にするのはLuaCalendarのバージョン3.1.
このカレンダー,外部ファイルで与えられた祝日リストを読み込んで表示する.この祝日リストを毎年手書きで書き換える必要がある(日本は毎年,祝日が前後するので).
なので,このリストを書き換えましょう・・・てんじゃ面白くないし,面倒くさい.Googleカレンダーから「日本の祝日」 を読み込んでやろうってこと.

その結果が↓.見た目を自分好みに多少いじってある.祝日にマウスカーソル合わせると,ポップアップで祝日名を表示してくれる.



とりあえず,改造済みのスキンをココにおいておきます.
このスキンのキモはRainmeterとLuaの間でのデータ送受信.つまり,
LuaCalendar.iniのmeasureでGoogla Calendar APIを叩いて祝日リストを取得

取得したデータをLuaからSKIN:GetMeasure(),GetStringValue()で読み取ってやる

Luaで整形して,正規表現にしたがってキャプチャーしたデータをテーブル(Luaでは配列変数をこう呼ぶらしい)に格納
ということをしています.
なんでこんな面倒くさいことをしているかというと,現バージョンのRainmeterでは,Luaの拡張ライブラリをサポートしていないから.
Rainmeterでは将来的にLuaの拡張ライブラリをサポートするかもね,とのこと.
もし拡張ライブラリがサポートされるようになったなら, Lua上から直接Google Calendar APIを叩くことができるのに.

で,以下,注意.
  • 起動直後はGoogleカレンダーからのデータ取得に時間を要するため,祝日がうまく表示されない.
表示されないときは,前後の月に移動したりして,カレンダーを再描画してやると表示される.
これは,RainmeterとLua言語の間でのデータのやりとりで発生するもの.
時間があれば,もう少しなんとかならないかスクリプトを眺めるつもりだけれど,現状使用に耐えうるかな,という感じ.
実際,私の使っているデスクトップはどれも基本つけっぱで,ログアウトすらしない.なので,これで十分.
  •  必要に応じて,Variables.incのStartYearに取得するリストの開始年を入れる.
ここで指定した年の1月1日から取得する.どうも,2年分しか取得してくれないのは,Google Calendar APIの仕様なのか?
とはいえ,今の設定のままで2014年までの祝日を表示できるので, とりあえず満足.

いろいろ適当に改造したんで,動かなかったり,メモリ食ったりするかもしれない.
私の環境では問題なさそうなんで,ひとまずこれで.
余裕があったら,メンテナンス性を向上させるようにVariablesに変数(っていうか,これは定数って言い方の方がいいんじゃないのかな)を追加したりするかも.

0 件のコメント:

コメントを投稿