shearer (WebSlices)

今更だけどIE8で追加されたWebSlicesの機能を使えるようにしようと思ってScirpt書いてみた。ファイルはSUECさんのここ
WebSliceの仕様はWeb Slice Format Specification - Version 0.9を参照した。WebSliceは上記の仕様書にあるとおり、サイト内のclass=hsliceであるタグの中身で、IE8のWebSlicesでは基本的にこの中身*1を更新されてるかチェックし、更新されていれば通知するようになっている。
例にもあるように一番利用されるのはオークションサイトだろうけど、goo*2のように天気予報、占いといった比較的賞味期限の短くて最新の情報だけが有用な場合にもRSSに対する優位性があるように思う。逆に、ブログ*3のような過去の更新も有用な場合はこれまでどおりRSSを利用するのが適切だと思う。WebSliceは初歩的なhtmlが理解できればよいので個人でレンタルサーバを借りて個人でサイトを運営する場合なんかも利用しやすい利点もある*4
存在自体は前々から知ってはいたけれども、あまり対応サイト*5がなかったのと、そういうジャンルが得意な人が作るかな、と思って様子見してた。対応サイトも増えてきたし、配信サイト以外でも正規表現で特定箇所の更新チェックできるように作れば便利かな、と思ったんだけど先にできたのは正規表現のほうだった。Sliceにidが必須になってるからgetElementByIdが使えるし楽かなーと思ってたらcontent-entryがaタグにも使えるとかfeedurlがあるとかで思ったよりめんどくさかった。ていうかaタグをcontent-entry指定できるならfeedurlが何のためにあるのかよくわからないのだけど。
本題。表示はIEPanel、IEDock、PersonalChannelを利用するとして、巡回と登録をどうするか。ExSearchBarと同じようにISleipnirを渡せば話は単純なんだけど、この類が増えると起動時*6にわんさか中継用のダミーが開いてうっとうしい。というわけで、表示用のプラグインからはUserActionを実行し、スクリプトからはhtmlファイルとjsファイルを書き出すようにした。既読管理を通常のjavascriptとhtml、cssでやるしかなかったのでやや強引なやり方で非表示にするようにしている*7

上の図が登録時の画面。登録するときは、切り出したいページを開いてsearchsliceを実行する。もしWebSliceを配信しているページなら初期段階で選択されているはず。されていなければidを選択し、そのタグの中身を切り出すか、正規表現モードに切り替えて正規表現と表示用のフォーマットを入力する。フォーマットをevalした内容がエントリになるのでwhile*8なんかを使ってstrを処理し、最後に;strとやれば結構複雑な内容でもいける。よくわからなければ初期状態の$[0][0] || $[0]で最初にマッチしたものを表示できる。正規表現モードで編集するときは表示をplainにしておいて出来上がってから確認時にpreviewにするとよいと思う。gooの天気予報、gooの今日の占い、pixivのランキング画像を表示させると左側の図のようになる*9
おおむね初期段階で欲しかった機能は実装したけど、まだエラー処理がついてないので巡回時にサーバダウンしてたりすると巡回が中断して中途半端なHTMLを吐き出してしまう。正規表現のサポート*10もついてないので快適に利用できる層は限られてるかな。
ちょこちょこ使ってみた感じだとエントリをグループ分けしてグループごとにhtml吐き出すようにしたようが便利そうな感じ。けどそうすると更新管理が複雑になりそうだしグループごとにcss指定できるようにもしたいなぁ。グループごとにタブ管理したほうが無難だろうか。あと、どうにかしてもっとわかりやすく且つうざくないように更新を通知したいな。

*1:実際にはrel=feedurlやclass=entry-contentなaタグで別の中身も指定可能

*2:がんばってるね

*3:なんせWeb"log"が由来だしね

*4:いまどきはhtmlわかるって程度の人がわざわざサーバ借りてサイト立ち上げたりしないかな?

*5:オークション以外の利用法も思いついてなかったし

*6:パネルにすれば表示されるまでは開かないけど、やっぱり開くし

*7:そのせいで提供サイトのURLがステータスバーに表示できないけどちゃんと開けるはず

*8:無限ループになりやすいので注意

*9:サイト別のcssで整形済み

*10:といっても大層なもとは作れないと思うけど