2008年12月02日

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


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 はてなブックマーク数
posted by suVene at 00:45