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も今回初めて触れたので、覚え間違いがあるなら早めに修正したいところです。

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

ラベル: , , ,

2007年8月26日日曜日

Firefox拡張メモ

Firefoxの拡張メモ。
Firefox Portableで使用したことのある拡張一覧です。

keyconfig

ショートカットキーをカスタマイズします。
公式は大分前から更新停止していて、Firefox 2.0.0.7対応している拡張は非公式の拡張(日本語版)のみのようです。

All-in-One Gestures

マウスジェスチャに代表される、あらゆるマウス操作をカスタマイズします。日本語対応。

ColorZilla

カラーピッカー。
抽出ポイントを選択しやすくするためか、[ページ拡大] 機能のおまけも付いてきます。日本語対応。

Firebug

強力なJavaScriptデバッガ。
DOMツリーを表示でき、HTML構造の確認に役立ちます。非公式版は日本語対応。

FoxyProxy

設定したURL毎にProxyを切り替えて接続します。
URLリストを使わなければ、単純なProxy切り替えとしても使えます。

日本語に対応していないので、英語が得意でない人は辞書を引きつつ頑張ってください。
Firefox Portableを使用している場合は、オプションから [I am using Portable Firefox] にチェックを入れないと動作しません。

FullerScreen

デフォルトのFirefoxは全画面表示で [ナビゲーション ツールバー] と [タブバー] が残りますが、この拡張を入れることでページ描画領域だけで全画面表示できます。
英語表記ですが、設定項目がそれほど多くないので何とかなるでしょう。

Gmail Notifier

Gmailの新着メールをお知らせします。
ログインも楽になるので、Webメールを利用しているなら、入れる価値は十分あります。日本語対応。

IE Tab

現在のタブをIEエンジンに切り替えて描画します。お気に入りからもIEエンジンに切り替えることが可能です。
IEでしか表示できないサイト用に。日本語対応。

Locale Switcher

Firefox本体の言語設定を切り替えます。Firefox英語版を入れて、言語設定を日本語に切り替えたいときに。

以下に、Firefox Portable の言語設定を英語から日本語に変える方法を紹介します。

  1. Locale Switcher をインストール
  2. http://releases.mozilla.org/pub/mozilla.org/firefox/releases/ にアクセス
  3. http://releases.mozilla.org/pub/mozilla.org/firefox/releases/(Firefoxのバージョン番号)/win32/xpi/ へ移動
  4. ja.xpi をダウンロード
  5. ja.xpi をFirefoxウインドウにドラッグ&ドロップ
  6. Firefox再起動
  7. [Tool -> Languages -> Japanese] にチェック
  8. Firefox再起動
NoScript

ホワイトリストに登録されていないURLにアクセスしたとき、JavaScript, Java, Flash, その他プラグインを遮断します。
この拡張の便利なところは遮断したときに、情報バーでお知らせしてくれることです。
ページが正常描画されなかったときに、JavaScriptを禁止したことが原因かもしれないと一目でわかるので重宝します。
ほとんど日本語対応ですが、英語表記のままの箇所が少し残っています。

ScrapBook

WebページやWebサイト全体をスクラップ的に保存します。
使用してみて、気が付いた特徴は以下の通り。

  • 保存したページは、メニューやサイドバーの [ScrapBook] からアクセスできる
  • 保存しないページへの相対パスリンクを絶対パスに変換できる
  • JavaScriptで改変した内容もソースに反映される
  • Webページのテキストにマーカーをつけて、ハイライトできる
  • 保存したページをHTML要素単位で視覚的に削除できる (一回だけ [元に戻す] をできる)
  • 日本語対応
Stylish

ユーザースタイルシートの編集/管理を行います。日本語対応。

Tab Mix Plus

タブに関連する挙動をカスタマイズします。
[新しいタブをアクティブなタブの隣に開く], [タブバーをホイールクリックしたときにタブを閉じる] など、国産タブブラウザで当たり前に出来る多く機能をこの拡張で実現できます。日本語対応。

Tab Tree

サイドバーに [現在開いているタブ] をツリー表示します。
アルファ版なので機能は少ないですが、不具合はなく。
難点を述べるなら、[Tab Tree] を呼ぶショートカットキーがないのが少し不便です。日本語対応。

tabgroups

複数のタブをまとめる「タブグループ」というタブを配置し、多数のタブを効率よく管理します。
英語表記ですが、オプションがないので使用するに当たって支障はないと思います。

Syleraのレイヤーによく似た機能で期待していたのですが、タブを50個ほど開くと動作が不安定になるので泣く泣く使用を断念しました。
公式HPでは「既知の不具合」が判明しているにも関わらず、更新されていないので、不具合修正は期待できそうにありません。

userChrome.js

ユーザースクリプトを追加してFirefox本体の機能をカスタマイズします。

ViewSourceWith

Webページのソースを予め設定しておいた任意のテキストエディタで開きます。
使用してみて、気が付いた特徴は以下の通り。

  • 右クリックメニューに [ソースをプログラムで開く] という項目を追加する
  • ページ上の右クリックメニュー [ページのソースを表示] のエディタは変更しない
  • 登録したエディタに対して、文字コード「UTF-8」の文字列を渡す
  • 複数のエディタを登録できる
  • 日本語対応

秀丸エディタを登録すると、文字コードの指定し直しを要求される事があります。
秀丸エディタはmeta要素のcharset属性値から文字コードを取得して読み込みを試みますが、ViewSourceWithはUTF-8のテキストを秀丸に渡すので、charsetの値がUTF-8ではないとき、文字コードが合致しません。
起動オプションが渡せれば、秀丸は強制的にUTF-8として開くことが出来るのですが…。

ラベル: ,