LDRizeはSITEINFOの“domain”のところにサイトのXPathを記入できるんだけど、AutoPagerizeは“url”にはサイトのURLしか記入できない。AutoPagerizeの“url”の部分にもXPathが指定できれば凄く便利だと思ってたんだけど、taizoooさんという方がその方法を紹介している。
ここで紹介されてる通りにAutoPagerizeの該当部分を書き換えると、“url”にXPathが書けるようになる。つまりURLごとにSITEINFOを書くんじゃなくて、ブログツールとか同じ構造をしているサイトならXPath別にSITEINFO書くだけで済むので、SITEINFOの数が減らせる。WordPress用、MovableType用みたいな感じでSITEINFOを書いとけば事足りるようになる(テンプレートが違ったら動かないだろうけど)。XPathでAutoPagerizeが実行可能か判定するので、独自ドメインで運営されてる個人サイトでもAutoPagerizeできるようになる。これは画期的なことですよ!
そういうわけでP_BLOGでもAutoPagerize本体に改変を加えてSITEINFOを書けばAutoPgerizeできるようになった。XHTMLに変更を加える必要なし。以下にSITEINFOを晒しておきますので興味がある方はどうぞ。なお僕はPHPerなので正規表現には自信がありません。不都合がありそうだったら教えていただけるとうれしいです。(ちゃんと直します)URL使わないんだから正規表現関係なかった。もうダメだ。
url: '//address/a[contains(@title, "P_BLOG")]',
nextLink: 'id("prev-logs")/a | //div[contains(@class, "section") and position()!=1]/p[@class="flip-link"]/span[@class="next"]/a',
insertBefore: 'id("prev-logs")',
pageElement: '//div[contains(@class, "section")][1]',
exampleUrl: 'http://pbx.homeunix.org/p_blog/index.php',
なおFooterの address/a のtitleの中に“P_BLOG project”という文字列が含まれているかどうかでP_BLOGで動いているかを判定していますので、カスタムフッターを使ってたり、FooterにP_BLOG projectへのリンクを表示していないサイトではAutoPagerizeは効きません。
微修正
“insertBefore”追加と、“pageElement”を修正。すでにXHTMLにMicroformatsを埋め込んであるサイトだと挙動がおかしくなるっぽいので、 '//div[@class="section"][1]'
を '//div[contains(@class, "section")][1]'
とした。
さらに追記
なんかXPathで指定するのってパフォーマンス悪いらしい。確かに重いかも…。
AutoPagerizeがurlしかスクリプト実行可能かの判定に使ってないのにはちゃんと理由があったのか。