アーカイブ

2008 年 12 月 30 日 のアーカイブ

[vimperator]Growl風通知 plugin(天気予報, はてなボトル, Twitter, Wassr)

2008 年 12 月 30 日


Mac には、Growl つって色んなアプリケーションからイベントを通知してくれるアプリがある。Windows も Growl と API が共通なアプリがあるにはあるんだが、vimperator で実装してみた。(Growlとは非互換)

まぁ、どれだけ天気予報が好きなんだって話なんだが。
Twitter や Wassr のつぶやきが現れては消えてゆき、はてなボトルが海の藻屑になっていくのを眺めているのも面白い。

実際の見た目はこんな感じ。

20081230_1.png

デフォルトでは 10秒 で消えるようになってる。

アプリの構成は

~/vimperator/plugin/_libly.js
notifier.js
notifier/growl.css
observer_growl.js
subject_hatelabo_bottle.js
subject_twitter_scraper.js
subject_wassr.js
subject_weather_yahoo.js
みたいな感じで配置する。
それぞれのファイルの役割は、
_libly.js
汎用ライブラリ
notifier.js
変更通知framework
growl.css
見た目
observer_growl.js
変更通知を受けて Growl 風に通知するplugin
subject_……
変更検知するplugin
になってる。
変更通知framework 自身のコマンドは、:notifierstart, :notifierrestart, :notifierstop がある。説明はそのままなので省略。
注意点として、subject_twitter_scraper.js は事前にブラウザでログインが必要。API 叩いてもいいけど、他の Twitter Client との兼ね合いで制限にかかっちゃうのもアレだから。

天気予報(subject_weather_yahoo.js)は、Yahoo!天気情報 のページで検索して、実際のピンポイント天気予報がある URL を以下のように設定する。
liberator.globalVariables.subject_weather_yahoo_urls = [
'http://weather.yahoo.co.jp/weather/jp/27/6200/27127/5300001.html'
];

実は、observer_growl.js も
liberator.globalVariables.observer_growl_settings = {
'Hatelabo bottle': { life: 20, keyword: 'はてな' },
'Weather forecast by Yahoo!': { sticky: true },
'Wassr': { sticky: true }
};
な感じで設定ができるんだけど、まだ life(消えるまでの時間) と、sticky(付箋のように×を押すまで張り付く) しか実装していない。

そのうち気が向いたらするかもしないかも。

追記

- 2008/12/30 23:04 twiter の通知はちょっと邪魔だ!

links

- /lang/javascript/vimperator-plugins/trunk/notifier.js – CodeRepos::Share – Trac はてなブックマーク数
- /lang/javascript/vimperator-plugins/trunk/notifier – CodeRepos::Share – Trac はてなブックマーク数
- /lang/javascript/vimperator-plugins/trunk/_libly.js – CodeRepos::Share – Trac はてなブックマーク数



Programming

[vimperator]pluginManager.js に最終Ver.チェックと plugin 更新機能追加(plugin 側に 追加が必要)

2008 年 12 月 21 日


pluginManager つって、自分がインストールしてる plugin の情報を表示してくれる plugin がある。
(表示される為には、plugin 側で特定の書式に従う必要があるが、coderepos の plugin は徐々に対応されている)
/lang/javascript/vimperator-plugins/trunk/pluginManager.js – CodeRepos::Share – Trac はてなブックマーク数

表示はこんな感じでみえる。
20081221_1.png
-v[ersion] をつけると、もう少し詳細な情報が見れる。


で。


タイトルにあるように、更新チェックと plugin 更新機能を追加した。

更新チェック

:pluginhelp -c[heck] [name1 name2 name3, …]
20081221_2.png

plugin 更新

:pluginhelp -u[pdate] [name1 name2 name3, …]
20081221_3.png

information のところに、upate complete となっていたら、更新完了。サーバが新しい場合は上書きしちゃうので注意。
local version is newest.は、ローカルの方が新しいつってんだけれど、Version 比較を単純な方法でしか今はしてないので、local 0.1.9 と server 0.1.10 だと、ローカルの方が新しい!とか言われちゃうかも?
支障がありそうなら dot で split して比較するのもありだけど、まぁよいかなと。(追記あり)


あと、latest な resource を置いている場所を知る必要があるので、plugin 側の PLUGIN_INFO に <updateURL> が必要。それがない場合は、unknown となって更新はされない。

つーか、id:teramako さんに断り入れないまま機能追加しちゃったから、気に入らない場合は変更・削除されちゃうかもです!

追記

- 2008/12/22 21:00 Last-Modfied を見て対応するようにした。

links

- /lang/javascript/vimperator-plugins/trunk/pluginManager.js – CodeRepos::Share – Trac はてなブックマーク数


Programming

[vimperator] nextlink.js (AutoPagerize for vimperator)

2008 年 12 月 14 日


vimperator のデフォルトの “[[" "]]” のマップは、next とか >> だとかが textContent なモノや link @rel=”next” なモノが開く仕様になってて、nextpattern, previouspattern に追加できるわけだけども、色んなサイトがある中でそれだけじゃ対応しきれないことが多い。

んで、IRC#vimperator@wide かなんかで、AutoPagerize の wedata の nextLink 引っ掛けてマップできればなぁ、みたいな事を id:otsune さんや、id:teramako さんが話してて、「なるほど!」と思ったので実装してみた。

- /lang/javascript/vimperator-plugins/trunk/nextlink.js – CodeRepos::Share – Trac はてなブックマーク数

これで、”]]” を押すことにより、Autopagerize の wedata に定義されているサイトならば、次のページを引っ付けて表示するようになる。そのとき、”[[" には、前のページの先頭をマップするので、
- "]]” → “]]” → “[[" → "[[" → "[["
と押すことで、
- 2page → 3page→ 2page→ 1page
みたいな感じで、PageDown・PageUp 的な動きができる。


ページを引っ付けるんじゃなくて、ページ移動(C-x, C-a的な)がしたい場合には、
let g:nextlink_followlink = "true"
を、.vimperatorrc などに設定しておくと、同じく次のページをどんどん辿れる。

この設定の場合には、@rev="prev" という microformats のようなメタデータがある場合に、起点となるページ以前にずっと遡れるという利点があったり。(false の場合でも、ページの先頭にどんどんくっつけていくことは可能なんだけども)


一応、対応する vimperator は 1.2、2.0 共に動くようにしといた。けど、1.2 の場合はなぜかページナビゲーションの css 定義がうまく import できない!まぁ、実害はないけど。


あぁ、それから _libly.js っていうライブラリも使ってるので、同時にもってきといてください。
これを最新版にすると、古い multi_requester.js などが動かなくなる可能性もあるけど、その場合は、coderepos から最新版をもってくれば ok.

という訳で、よき vimperator ライフを。


links

- /lang/javascript/vimperator-plugins/trunk/_libly.js - CodeRepos::Share - Trac はてなブックマーク数
- /lang/javascript/vimperator-plugins/trunk/nextlink.js - CodeRepos::Share - Trac はてなブックマーク数



Programming

[vimperator]multi_requester.js で天気予報をみる!(extractLink)

2008 年 12 月 2 日


multi_requester.js で天気予報とか見たいなーとか考えてて、

Yahoo!天気情報 はてなブックマーク数

とかで郵便番号か住所で検索すればよさそうだと考えたのだけど、これって検索してもいきなり1箇所が特定されるわけではなくて、1クッション挟む状態になる。

検索検索

こーやって検索すると。

結果

こーなる。


ちなみに、実際の「ピンポイント天気」なる目的ページは郵便番号とかで置換可能かと思いきや、地域・地区などが URL の途中で入ってきて、どっかに変換データかロジックでもない限り検索してみないとわからない。

なので、SITEINFO に extractLink いう属性を追加して、そこに XPath を与えることで、リクエスト結果を元に再度リクエストする仕組みを作った。実際の定義はこんな感じ。

name:           'weather-yahoo',
description:    'Yahoo!天気情報',
url:            'http://search.weather.yahoo.co.jp/bin/search?pref=all&p=%s',
xpath:          'id("cat-pass") | id("yjw_pinpoint_today") | id("yjw_pinpoint_tomorrow") | id("yjw_week")',
srcEncode:      'EUC-JP',
extractLink:    '//table[@class="yjw_table3"]/descendant::a[1]'
これで一旦検索した後で、extractLink からのリンクを辿り、取得した結果を xpath で引っ張るという仕組みになる。Plagger の TruePermalink 的なものか、Autopagerize の nextLink みたいなものか。

これで、以下のように郵便番号とか市区町村名で検索すると

20081201_4.jpg

こんな感じで結果が出力される。

バッファ出力

後は、.vimperatorrc とかで
javascript <<EOM
liberator.globalVariables.multi_requester_mappings = [
[',mw', 'weather-yahoo', '', '5300001'], // keymap, subcommand, bang, args
];
EOM
みたいな感じで定義しとくと、いつでも特定の天気予報が。


しかし、ここで一つ問題が。しかも大きな!

2.0pre だと、Yahoo のページ(というか EUC-JP のページ) だと、正常に出力されるのに、それ以外のページで出力しようとしてもバッファが HTML を解釈してくれない!!! 1.2 だとうまくいくのに。なんでだろー。


つーか、実はいうと、いちいち検索してリンク取得して再取得みたいなことしなくても、直接天気のページにリンクする SITEINFO を .vimperatorrc に書いてマップしときゃ、手っ取り早いわけだが。
javascript <<EOM
liberator.globalVariables.multi_requester_siteinfo = [
{
name:           'weather-yahoo-oosaka',
description:    'weather-yahoo-oosaka',
url:            'http://weather.yahoo.co.jp/weather/jp/27/6200/27127/5300001.html',
xpath:          'id("cat-pass") | id("yjw_pinpoint_today") | id("yjw_pinpoint_tomorrow") | id("yjw_week")',
srcEncode:      'EUC-JP'
},
];
liberator.globalVariables.multi_requester_mappings = [
[',mw', 'weather-yahoo-oosaka', '', 'dummy'],
];
EOM
ま、extaractLink 追加したよってことで。

追記 2008/12/07 23:37

ver.0.4.1 で 2.0pre も対応した。Changeset 25714 – CodeRepos::Share ? Trac

Links

- suVeneのあれ: [vimperator]リクエスト結果をバッファ出力(muilti_requester.js) はてなブックマーク数
- CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 1.2) はてなブックマーク数
- CodeRepos::Share – Trac – multi_requester.js (for vimperator ver. 2.0pre) はてなブックマーク数
- アイテム – データベース: Multi Requester – wedata はてなブックマーク数



Programming