◆F99a.q8oVE::Blog

Hatena bookmark hack ver. 1.2 - Alternative 全ページをはてなブックマーク化する Greasemonkey Script

この記事をクリップ!コメントを見る このエントリーをブックマークこのエントリーを含むブックマーク ◆F99a.q8oVE: 2006/05/04 19:09:34

JavaScipt - E4Xによるレスポンス処理 を見て、Firefox 1.5 以降では E4X が使えるんだということを思い出したので、Hatena bookmark hack を書き直してみました。

hatenabookmarkhack.user.js (スクリーンショット: ◆F99a.q8oVEの日記 - Hatena bookmark hack - Alternative 全ページをはてなブックマーク化する Greasemonkey Script)

E4X のことはあまり詳しく知らなかったので、次のページを参考にしながら書いてみました。てきとう E4X < 01 < March < 2006 < nulog, NULL::something : out of the headphone

Hatena の API を叩いて返ってきた xml から bookmark 数を取り出す部分はこんな感じ。

var existxml = new XML(res.responseText.replace(/^<\?xml.*?\?>/, ""));
var countofBookmark = existxml.count.(@name == "bookmark");

すげー!E4X を使う以前はこうでした。

var d = (new DOMParser).parseFromString(res.responseText, "application/xml");
var countofBookmark = d.evaluate(
  "/existxml/count[@name='bookmark']/text()",
  d,
  null,
  XPathResult.NUMBER_TYPE,
  null
).numberValue;

簡潔です。ネームスペースまわりもこれで解決。こんな感じでかけます。

var rssDoc = new XML(xmlString);
var rss = new Namespace("http://purl.org/rss/1.0/");

for each (var item in rssDoc.rss::item.(rss::description != "")) {
  hogehoge();
}

今までこんなの書いてたのが嘘のよう。

d.evaluate(
  '//*[local-name()="item" and namespace-uri()="http://purl.org/rss/1.0/" and *[local-name()="description" and namespace-uri()="http://purl.org/rss/1.0/" and .!=""]]',
  d,
  d.createNSResolver(d),
  XPathResult.UNORDERED_NODE_ITERATOR_TYPE,
  null);

E4X が使えるなら、JSON よりも扱いが簡単かもしれませんね。

TrackBack URL: http://blog.f99aq8ove.net/comment.cgi/tb/1146737374/
Created by f99aq8ove.