SITEINFO
Top / SITEINFO
AutoPagerize用のXPathとかの入ったデータ
https://autopagerize.jottit.com/about_siteinfo_(ja)
About SITEINFO
AutoPagerizeの基本的な動作は下の2つで、これが繰り返し行われます。
- ページから「次のページのURL」を取り出す。
- 次のページを読み込み、「継ぎ足しに必要な部分」だけを取り出し、継ぎ足しを行う。
AutoPagerizeが動作するには、「次のページのURL」と「継ぎ足しに必要な部分」がどの部分であるかが分る必要があります。これらWebページによって様々なので、なかなか自動で見つけることはできません。そのためAutoPagerizeでは、自動でみつけるのは諦めて、Webページに応じて必要な情報をあらかじめ用意するという方法をとっています。AutoPagerizeでは以下の情報を利用するWebページごとに用意しています。
- 「次のページのURL」を示すXPath式
- 「継ぎ足しに必要な部分」を示すXPath式
- どのWebページ(URL)に対して利用するのかを示す正規表現
これらの情報をまとめたものをSITEINFOと呼んでいます。このSITEINFOがないと、AutoPagerizeはどのページでも使えません。逆に、たくさんあれば様々なページで使えるようになります。いまAutoPagerizeが使えていないページでも、SITEINFOを追加することで使えるようになったりもします。
さらにAutoPagerizeでは、このSITEINFOをユーザ同士で共有し、ユーザがその追加や変更を行っています。そのおかげで、様々なWebページでAutoPagerizeが使えるという状態が維持されているのです。
AutoPagerizeは、SITEINFOを共同で編集するためにwedataというシステムを利用しています。wedataは、誰でもWikiのようにデータを書き換えることができるデータベースです。
あるページでAutoPagerizeを動かすためにSITEINFOつくった場合、これをwedataに登録するこで、他の全ユーザもそれを利用できるようになります。また、ページが変更されSITEINFOを直さないといけなくなったとしても、他のユーザが直してもらえるかもしれません。
詳細
url
対象となるサイトのURLにマッチする正規表現。 location.href.matchで、対象かどうかを判別している。
- ドットは「\\.」(文字列であるためスラッシュが2つ繋げないと正規表現のスラッシュ1文字として扱われません)
- 1文字の任意の文字は「.」
- 任意の長さの任意の文字は「.+」(注意:「*」ではありません。「www.example.com/foo/*」ではなく「www\\.example\\.com/foo/.+」です)
- alphabet,number,underscoreの繰り返しは「\\w+」。[A-Za-z0-9_]+ と同等
- 数字の繰り返しは「\\d+」
- www.example.jpかexample.jpのどっちでも良い場合は「(?:www\\.)?example\\.jp」
- hoge(?!fuge)で、hogeに続いてfugeが現れない場合にのみマッチ。例:「www\\.example\\.com/(?!setting)」 wedataに登録する際は「\\」を「\」に置き換えて下さい。
nextLink
次のページへのリンクをXPathで指定。 取得したリンクから次のページを読み込む。 複数の要素にマッチする場合は、一番はじめのものが使われる実装になっています。
pageElement
ページの本文部分として切り出すノード群をXPathで指定する。( //div[@id="page"] は id("page") のほうが速いし見やすいのでおすすめ) この指定によって取得されたノード群がinsertBeforeの要素の前に挿入される。insertBeforeが省略されている場合、もしくはXPathを評価した結果なににもマッチしなかった場合はpageElementの直後に挿入されます。
exampleUrl (optional)
そのSITEINFOが適用されるURLのサンプル。SITEINFOが壊れていないかのテストで使われます。SITEINFOが壊れていたときの修正がやりやすくなるのでなるべく書いておきましょう。
insertBefore (optional)
読み込んだページから切り出したノード群を挿入する際に基準となるノードをXPathで指定。省略した場合pageElementの直後が指定されたものとして扱われます。たいていの場合は指定する必要はありません。 insertBeforeのと言う名の通り、基準となるノードの前に挿入される。
ヒント:insertAfter相当が欲しいのならば、*expression*/following-sibling::node() とすればよい。