f99aq8ove's blog

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

tag: Firefox, Greasemonkey, E4X, and hatena
04 May 2006

このエントリは 2006-05-04 に書かれました。 内容が古くなっていたり、もはや正しくないこともありますので、十分検証を行ってください。

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 よりも扱いが簡単かもしれませんね。

Related Posts