2008年9月28日日曜日

AutoPagerize用SITEINFO + SITEINFOの書き方 まとめ

かねてより試してみたかったGreaseMonkeyスクリプト「AutoPagerize」が非常に便利だったのでWedata未登録のSITEINFOを書いてみました。

AutoPagerize用SITEINFO

var SITEINFO = [
 {
  name:         'ブラック会社に勤めてるんだが、もう俺は限界かもしれない',
  url:          '^http://ueharasan\.y\.ribbon\.to/html/',
//  Unicodeエスケープ前の文字列 (Wedata登録時はエスケープしなくてもOK)
//  nextLink:     '//a[starts-with(text(),"次") or contains(text(),"進む")][1]',
  nextLink:     '//a[starts-with(text(),"\u6B21") or contains(text(),"\u9032\u3080")][1]',
  pageElement:  '//a[starts-with(text(),"\u6B21") or contains(text(),"\u9032\u3080")]/preceding-sibling::*[self::img or self::br or self::hr]',
  insertBefore: '/html/body/hr[last()]',
  exampleUrl:   'http://ueharasan.y.ribbon.to/html/1to1.htm'
 },
 {
  name:         'ふたばちゃんねる',
  url:          '^http://[^\.]+\.2chan\.net/[^/]+/[\da-z]+\.htm$',
  nextLink:     '//form[substring(@action, string-length(@action) - string-length(".htm") + 1) = ".htm"][last()]',
  pageElement:  '//hr/following-sibling::table[@align="right"]/preceding-sibling::node()[not(self::center or self::p or self::hr and @width)]',
  insertBefore: '//hr/following-sibling::table[@align="right"]',
  exampleUrl:   'http://nov.2chan.net/q/futaba.htm'
 },
]

SITEINFOの適用方法

  • "C:\Documents and Settings\\Application Data\Mozilla\Firefox\Profiles\****\gm_scripts\autopagerize\autopagerize.user.js" の var SITEINFO に記入する
  • AutoPagerize - wedata にSITEINFOを登録する

上記いずれかの方法でSITEINFOを適用できます。

ちなみに、この記事に書いたSITEINFOはwedataに登録済みなので、autopagerize.user.js を編集しないでも使えます。
SITEINFO作成時には「autopagerize.user.js でテストして、正常ならWedataに登録する」という流れでOKなようです。

XPathの参考URL

XPath Checker :: Firefox Add-ons
ページ上で右クリックすると、選択したオブジェクトを指定するためのXPathを出力してくれるFirefox拡張です。
右クリック後に現れたウインドウでXPathを指定すると、指定したオブジェクトのみを表示してくれるので、XPath構文をテストする用途に向いています。
AutoPagerize用のXPathをかんたんに作るためのブックマークレット AutoPagerize IDE - bits and bytes
このブックマークレットを使用すると、ページ上で選択したオブジェクトのXPathを出力してくれます。
XPathを指定したオブジェクトにボーダー線で付けて装飾することもできます。
XPath Tutorial
XPathの構文例に対応したツリー構成のXMLソースを表したチュートリアル。
英語が苦手な私でも、結果が一目瞭然なのが有り難かったです。
Latest topics > CSS3セレクタとXPathでの表現の対応表 - outsider reflex
CSSセレクタに対応したXPathを表にした記事。
CSS習得済みの人にとってはわかりやすいと思います。
XPath リファレンス
MSDNのXPathリファレンス。
XPathを全般に渡って解説されているので、ここで全体を把握してキーワードを元にGoogle検索で詳細を探すと良いと思います。

Tips/FAQ 的なこと

"autopagerize.user.js" に記入するXPathはマルチバイト文字をUnicodeエスケープしないと働かない

マルチバイト文字は Text Escaping and Unescaping in JavaScript 等で \uXXXX の形式にしないと働かないので、注意してください。

XPath Checker ではマルチバイト文字をUnicodeエスケープすると働かない

"autopagerize.user.js" と正反対の性質なので、要注意です。
「XPath CheckerでXPath構文をテスト → "autopagerize.user.js" にUnicodeエスケープしたXPathを入力してテスト」という流れが良いと思います。

Wedata登録時にマルチバイト文字がUnicodeエスケープされていない場合は、自動的にエスケープされる

Wedata登録時にはUnicodeエスケープしていないXPath構文をそのまま入力すると、Wedata(が出力するJSON)にはUnicodeエスケープされたデータが登録されます。
もっとも、その前にSITEINFO制作者は "autopagerize.user.js" でテストしているでしょうから、この機能に意味があるかどうかに疑問は残りますが…。

/preceding-sibling::* は要素ノードのみにマッチし、/preceding-sibling::node() で全ノードにマッチする

/preceding-sibling::node() でテキストノードを含めたすべてのノードを取得できます。

反面、node()はパフォーマンスが若干悪くなるそうなので、必要なときだけ node() を使う方針でいいと思います。

ブックマークレット「AutoPagerize IDE」は一部のXPath構文で指定されたオブジェクトを強調表示しない

AutoPagerize IDEはテキストノード、hr要素ノード、/preceding-sibling::* のオブジェクトを枠で囲って強調表示しません。
複雑なXPathを指定する時は XPath Checker を使う必要があります。

備考

Autopagerizeを導入して2日目ですので、おかしな記述があったり、用語の使い方が間違っているかもしれません。
XPathも今回初めて触れたので、覚え間違いがあるなら早めに修正したいところです。

コメントはお気軽にどうぞ。

ラベル: , , ,

1 件のコメント:

Anonymous os0x さんは書きました...

> "autopagerize.user.js" に記入するXPathはマルチバイト文字をUnicodeエスケープしないと働かない

文字コードをUTF-8で保存すればUnicodeエスケープしなくても大丈夫です。

あと、insertBeforeは省略可能です。あるとメンテナンスの手間が増えるので、できれば省略してしまったほうが良いです。

2008年10月27日 13:43  

コメントを投稿

登録 コメントの投稿 [Atom]

この投稿へのリンク:

リンクを作成

<< ホーム