HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector

HTMLのドキュメントから繰り返し部分をみつける - bits and bytesをベースにして、(ページによるけど)3回くらいクリックしたらSITEINFOが作れるAutoPagerize Iteration Detectorという長い名前のFirefox extensionを作りました。

インストール

iterd.xpi version 0.12 (supports Firefox 2.0-3.0.0.*)

つかいかた

今回はスターバックスさんの店舗検索結果(住所・店名・条件から探す)を例としてご紹介します。 AutoPagerize Iteration Detectorをインストールすると、リンクを右クリックしたときに出てくるメニューにDetect iterationsという項目が追加されます。

SITEINFOを作る

SITEINFOを作りたいページで、次のページへのリンクをクリックしてDetect iterationsを選択します。これが1クリック目。

ここがちょっと計算量が多くて数秒ブラウザが固まっちゃうんですが、しばらくすると今開いているページと、さっき右クリックした次のページへのリンクの先のページとを比較して、候補の一覧がリストアップされたウインドウが出てきます。

pageElement XPathはpageElementとして使われる実際のXPathです。そしてその右にあるthisPageとnextPageはそのXPathで今開いているページと次のページでそれぞれいくつの要素がマッチするかを示しています。この候補リストは、たぶん正しいと思われる順でならべられています。上にあるものほどpageElementのXPathとしてたぶん正しくて下にいくほど怪しくなってきます。

AutoPagerize Iteration Detectorではページの中にある繰り返しの単位にマッチするXPathを自動で作っているので、うまく生成できているものはthisPageとnextPageの値は、1ページに含まれている件数と同じになります。この店舗検索結果ページは1ページに10件表示するようになっているので、リストの一番上にあるものがpageElementを表すXPathとして正しそうです。

クリックするとそのpageElementにマッチする要素のふちに水色の線がつくので、ほんとにあってるかどうかを目で確認することができます。これで2クリック。
hilighted pageElements

nextLinkは、はじめに右クリックしたリンクから次のページと今のページとを比較しつつ自動的に生成してあります。今回のように次のページへのリンクがあればたいていはうまく機能するので、自動で入っているXPathそのままで大丈夫です。

ただウェブページによってはBehanceのようにナビゲーションに次のページへのリンクがなくて数字だけが並んでいる場合があります。
behance navigation
こういう、現在位置の次が次のページ、というナビゲーションだとAutoPagerize Iteration DetectorはうまくnextLinkを割り出せません。割り出せないのですが3を右クリックして開くとnextLinkにはXPathが入っていますが、まず間違っているので、次のページへのリンクがないページではnextLinkは手とアタマを使って修正してあげてください。

URLにはSITEINFOを適用するページを正規表現で書きます。デフォルトでは今開いているページのURLが入っているのでてきとうに修正してあげる必要があります。今回はたまたま修正しなくていいのでこのまま。

できあがったらAppend this ruleを押してSITEINFOの生成は完了です。わずか3クリック!
で、作ったSITEINFOがうまく機能するか動作の確認をしてみましょう。

動作の確認

AutoPagerize Iteration DetectorはAutoPagerizeがキャッシュしているSITEINFOに細工をすることで、さっき作ったSITEINFOをどこかに書いたりすることなく使えるようにしてあります。Append this ruleを押したときに新しく作られたSITEINFOをキャッシュにマージしてあるのでページをリロードすればさっき作ったSITEINFOが適用されるようになります。 うまくAutoPagerizeされるようになりました。
autopagrized successful

今回の店舗検索結果(住所・店名・条件から探す)のようにURLの編集もいらない例は珍しいですが、ページが素直なつくりになっているところであればだいたい30秒くらいでAutoPagerizeすることができます。

SITEINFOの書き出し

こうしてAutoPagerize Iteration Detectorで作ったSITEINFOは一時的にAutoPagerizeが管理しているSITEINFOのキャッシュに保存されます。Firefoxを再起動しても、SITEINFOのキャッシュが有効なあいだはFirefoxの中に残っていてAutoPagerizeされますが、キャッシュの有効期限が切れてSITEINFOがリフレッシュされると消えてなくなってしまいます。AutoPagerize Iteration Detectorで作ったSITEINFOをずっと使うためにはSITEINFOを書き出す必要があります。 メニューのTools/Iteration detectorからAutoPagerize Iteration Detectorで作ったSITEINFOの一覧が見られるようになっています。
tools iteration detector
この一覧は一度Firefoxを終了させるとリセットされるので、作ったSITEINFOを転記したいときはFirefoxを終了させる前に開いてください。
defined siteinfo list

ウインドウの下側に作ったSITEINFO全部がinfogami書式で表示されるのでこれをコピーして使います。

生成されるSITEINFOには、SITEINFOを作ったときに使ったページのURLをsampleUrlとして含んでいるので、もし不都合なようだったら自分で削ってください。AutoPagerize0.0.19+Firefox3beta2とFirefox2.0.0.11で動作するのを確認してあります。

自動で生成できないとき

AutoPagerize Iteration DetectorでどんなページでもSITEINFOが作れるわけではありません。HTMLのドキュメントから繰り返し部分をみつける - bits and bytesを使ってページの中の繰り返しを見つけているので、そのページの繰り返しの単位が複数の要素から構成されているときには正しく機能しません。:ビックカメラ.comの検索結果ページのように、ひとつの繰り返しが hr, text, br, b, tableでできているようなページでは繰り返し部分を見つけることができないので、pageElementの候補に正しいpageElementのXPathが出てきません。

また、ページの中に繰り返しの部分が存在しない(1回以下)場合もやはり繰り返し部分を見つけられないのでCNET Japanのように記事本文をいくつかのページに分割しているタイプのページではAutoPagerize Iteration Detectorは機能しません。

参考資料

  • OperaのFast Forwardはどうやって次のページを決定しているのか - bits and bytes
  • さぁ、McCoyをはじめよう!!
  • Latest topics > XML署名とハッシュを使って安全な方法でアドオンを更新できるようにする - outsider reflex
  • XUL Tutorial:Tree View Details - MDC

tags

  • Firefox
  • extension
  • 「HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector」のはてなブックマーク数
  • 「HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector」deliciousブックマーク数
  • 「HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector」をはてなブックマークに追加
  • save "HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector" to del.icio.us
  • 「HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector」をリアルタイムブログ検索
  • permalink
  • ブラウザ別のタイマ性能比較
  • Firefox3でC++実装のXPCOMコンポーネントを作る

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/188
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2007 .12. 27 16:54

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox28
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • WebKit1
  • XML1
  • XPCOM4
  • XPath4
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design1
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript22
  • linux1
  • logging2
  • mobile4
  • perl5
  • tips6
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii3
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.06 (2)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines