かねてより試してみたかった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も今回初めて触れたので、覚え間違いがあるなら早めに修正したいところです。
コメントはお気軽にどうぞ。
ラベル: Firefox, GreaseMonkey, JavaScript, 拡張