新しくなったAutoPagerizeのSITEINFOバックエンドwedata

Picture 1-19

AutoPagerizeのSITEINFOがwedataという、キーと値を管理することを目的としたwikiのようなもので管理されるようになりました。このwedataはキーと値を管理するだけの単純なデータベースを不特定多数で編集することができる仕組みです。新しく自分でデータベースを作れことができるようになっているのでAutoPagerizeのSITEINFOだけでなく、自分で作ったスクリプトのためのSITEINFOをかんたんに作ったりすることができます。

私が作ったわけではないのですが、去年のはじめからこんな仕組みがほしいなと思っていたようなものになっていてとてもうれしいので、ちょっと長いですがwedataの紹介をしたいと思います。

AutoPagerizeとそのしくみ

いろんなサイトで次のページを自動的に表示するための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でデータを共有するときに生じる問題

SITEINFOの仕組みが少しずつ広まって利用者が増えたことで、同時にwiki上でデータを共有することでの難しさもいくつか見えてきました。

問題は大きく分けて二つあり、ひとつめはwikiというのは人間がHTMLのような構造化された文章を楽に書くことを目的に設計されたもので、データを書くことを目的に作られたものではないということです。構造化された文章もただのデータも似たようなものなので、大きなところで問題は出ないのですが、細かいところで問題がありました。

目的の違い

wikiについているHTMLをかんたんに記述するための書式がかえって邪魔になりました。AutoPagerizeのSITEINFOはinfogamiで共有されていましたが、このwikiでは _ で囲んだ部分が強調されるようになっています。そのため記述するSITEINFOの中に _ が入っていると出力されるデータにHTMLタグが出てきてデータが壊れてしまうので、_をエスケープして書く必要がありました(でもやっぱり忘れてそのまま書いてしまって動かないと悩んだりするわけです)。

また、記述されたSITEINFOの数が増えてくれるにつれて編集するときに目的のデータを見つけるのがちょっと面倒になりました。wikiの本来の目的であるふつうの文章を書くときは、ひとつの文章が長くなったときには複数のページに分けることでこの問題を避けることができますが、SITEINFOの場合分けるとプログラムが複雑になったり、あとから編集しにくくなったりするのでひとつのページに書くしかありませんでした。

誰がアクセスするかの違い

wikiは人間が文章を考えて書いたりするために設計されているので、プログラムから自動的に追加したり編集したりする機能がありませんでした。そのためAutoPagerize IDEのようなスクリプトでSITEINFOをかんたんに作ることができても、作ったSITEINFOをwikiに書くのは手で書かざるを得ませんでした。

wedata

AutoPagerize0.0.27 - SWDYHからいままでのSITEINFOにかわって使われるようになったwedata.net は上にあげた問題を解決しています。 まずキーと値を保持するのを目的に作られているので、入力したデータがそのまま出力されます。_等をエスケープしないとだめかなーと心配する必要がなくなりました。また、SITEINFOの記述ひとつひとつ(アイテムと呼ばれています)に個別のページができて、ひとつひとつ個別に編集できるようになっています。
Picture 4-13

API

以前は書き込まれたデータはHTMLとして出力されていましたが、wedataではJSON, JSONPといったプログラムから利用しやすい形式で出力させることができます。またRESTっぽいAPIが用意されていて、スクリプトからデータを参照したり、スクリプトからデータを書き込んだりもできるようになっています。Greasemonkeyからであればこんなコードで新しくAutoPagerizeの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 );

まとめ

wedataを使うと、かんたんに誰でも書きかえることができて、プログラムからも読んだり書いたりしやすいデータベースを作ることができます。

tags

  • data
  • サービス
  • 「新しくなったAutoPagerizeのSITEINFOバックエンドwedata」のはてなブックマーク数
  • 「新しくなったAutoPagerizeのSITEINFOバックエンドwedata」deliciousブックマーク数
  • 「新しくなったAutoPagerizeのSITEINFOバックエンドwedata」をはてなブックマークに追加
  • save "新しくなったAutoPagerizeのSITEINFOバックエンドwedata" to del.icio.us
  • 「新しくなったAutoPagerizeのSITEINFOバックエンドwedata」をリアルタイムブログ検索
  • permalink
  • JavaScript-XPathでXPathが評価される様子を視覚化する
  • wedata対応バージョンのSITEINFO作成用Firefox拡張機能 AutoPagerize Iteration Detector

comments

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

trackbacks

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

http://labs.gmo.jp/mt/mt-tb.cgi/214
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .04. 18 22:56

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox25
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • XML1
  • XPCOM4
  • XPath4
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design1
  • experiments3
  • extension14
  • google gears1
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript19
  • linux1
  • logging2
  • mobile3
  • perl4
  • tips5
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii2
  • windows7
  • サービス7
  • 和訳1

Archives

  • 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