Find TrackBack ping URL

miyagawaさんのエントリを見て、「TrackBack Auto-discovery用のRDFはコメントアウトされているから、innerHTMLとかじゃなくて、ドキュメントのノードを全てチェックし、nodeTypeが8かどうかをチェックすればコメントを抽出できるので、そこから正規表現かけてやればTrackBack ping URL探せそう!」と思ったのでシコシコ作ってみました。

JavaScriptのコードはこんな感じになっています。

var tburl;
var comments = new Array();
getComment();

for (var i = 0; i < comments.length; i++) {
  if (comments[i].match(/trackback:ping="([^"]+)"/)) {
    tburl = RegExp.$1;
    break;
  }
}

prompt('TrackBack ping URL', tburl);

function getComment(elm) {
  if (!elm) elm = document.documentElement;

  for (var i = 0; i < elm.childNodes.length; i++) {
    if (elm.childNodes[i].nodeType == 8) {
      comments[comments.length] = elm.childNodes[i].data;
    } else if (elm.childNodes[i].nodeType == 1) {
      getComment(elm.childNodes[i]);
    }
  }
}

getComment()が要素のノードを全部チェックし、定義済みのcommentsという名前の配列にコメントの中味をまとめてどんどん追加していく関数です。nodeTypeが1、すなわち要素の場合は、その要素からさらにgetComment()をよぶといういわゆる再帰的な仕組み。この関数が終了した後、今度はcommentsでループを回し、中味を、/trackback:ping="([^"]+)"/という正規表現でチェックしていきます。で、マッチしたらRegExp.$1でTrackBack ping URLを抜き出して、最後にプロンプトを表示ということ。

Bookmarklet: Extract TrackBack ping URL

FirefoxとIE6で動作を確認しました。まーこのままではあまり使い物になるとは思えないシロモノですが、これをベースに何かいろいろ出来るかも出来ないかも。

僕はほらローカルからPerlでTrackBack Auto-discoveryしちゃってるので・・・。誰かスゴイの作ってください。