AutoPagerizeのSITEINFOがwedataという、キーと値を管理することを目的としたwikiのようなもので管理されるようになりました。このwedataはキーと値を管理するだけの単純なデータベースを不特定多数で編集することができる仕組みです。新しく自分でデータベースを作れことができるようになっているのでAutoPagerizeのSITEINFOだけでなく、自分で作ったスクリプトのためのSITEINFOをかんたんに作ったりすることができます。
私が作ったわけではないのですが、去年のはじめからこんな仕組みがほしいなと思っていたようなものになっていてとてもうれしいので、ちょっと長いですがwedataの紹介をしたいと思います。
いろんなサイトで次のページを自動的に表示するためのGreasemonkeyスクリプトのAutoPagerizeは、wikiに書かれたサイトのHTML構造についての情報を参照して動くようになっています。wikiは誰でも書きこむことができます。誰かひとりがあるサイトについての構造をwikiに書いて自動的に次のページが表示されるようにすれば、ほかのAutoPagerizeのユーザはなにもしていないのにそのサイトで自動的に次のページが表示されるようになります。
ソーシャルブックマークサービスのdel.icio.usがうまく機能した理由を分析して書かれたThe Del.icio.us Lesson - Bokardoという記事の中にPersonal Value Precedes Network Value
という項目があります。みんなが使うようになると便利になるだけでなく、ひとりで使っているときにも便利なように、という意味です。AutoPagerizeに当てはめてみると、自分がひとりで使っていたとしてもwikiにサイトの構造(SITEINFOとよばれています)を書けばAutoPagerizeをより便利にな使えるようになりますし、みんなが書くようになればもっと便利になる、という点でこのPersonal Value Precedes Network Value
を満たしています。
もともとは、海外のサイトをみんなで日本語化するプロジェクトのJapanizeが誰もが編集できるwikiをデータベースにして日本語の表示を行う仕組みになっているのを見てそうしたそうです(出張 Shibuya.js 24 AutoPagerize 発表資料 - SWDYHで触れられています)。
wikiで編集するのはお手軽にできて便利でSITEINFOの数をグラフにしてみた - SWDYHにあるようにデータの数を順調に増やし、またサイトのHTMLを別に記述してスクリプトの動作を決定するという仕組みを採用したスクリプトもいくつか作られるようになりました。代表的なものとして、どのページでもjを押すことで次の項目までスクロールさせるLDRize – Userscripts.orgや、livedoor Reader上で全文がはいっていないフィードの全文を読めるようにするLDR Full Feed – Userscripts.orgがあげられます。
問題は大きく分けて二つあり、ひとつめはwikiというのは人間がHTMLのような構造化された文章を楽に書くことを目的に設計されたもので、データを書くことを目的に作られたものではないということです。構造化された文章もただのデータも似たようなものなので、大きなところで問題は出ないのですが、細かいところで問題がありました。
また、記述されたSITEINFOの数が増えてくれるにつれて編集するときに目的のデータを見つけるのがちょっと面倒になりました。wikiの本来の目的であるふつうの文章を書くときは、ひとつの文章が長くなったときには複数のページに分けることでこの問題を避けることができますが、SITEINFOの場合分けるとプログラムが複雑になったり、あとから編集しにくくなったりするのでひとつのページに書くしかありませんでした。
var opts = {
url: "http://wedata.net/databases/AutoPagerize/items",
method: "POST",
headers:{"Content-Type":"application/x-www-form-urlencoded"},
data: [
["api_key", YOUR_WEDATA_APIKEY],
["name", document.title ],
["data[nextLink]", nextLinkXPath ],
["data[pageElement]", pageElementXPath ],
["data[url]=", urlRegex ],
].map( function (a) {
return a[0] + "=" + encodeURIComponent(a[1]);
} ).join("&"),
onload: function (res) {
console.log({ res: res, opts: opts});
}
};
GM_xmlhttpRequest( opts );
トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。
http://labs.gmo.jp/mt/mt-tb.cgi/214
comments