livedoor Reader で記事のリンク先を書き換える

"v" で記事を読んだり、Greasemonkey スクリプトで「はてブ」にポストする時などに、フィードによってはフィード向けの URI が提供されているために困ることがあります。

特に SBM の場合、登録 URI のばらつきが生じたり、記事の一つ手前のクッション・ページが登録されてしまう場合もあるわけです。

アクセス元の分析のためとか、広告ページを経由させたい、といったフィード提供側の思惑があることは当然理解できるんですが、LDR の快適さの妨げとなることもまた事実です。

ということで、リンクを修正する方法を考えてみました。

"before_printfeed" イベントを使います:

register_hook("before_printfeed", function(feed) {
  if (feed.link_rewritten) return;
  var url = feed.channel.link;
  var s, r;  // search & replace (for caching regexp, if necessary)
  var iter;  // link-rewriter

  if (!url.indexOf("http://codezine.jp")) {
    s = /r\.x.+?(\d+)$/;
    r = "a/article.aspx?aid=$1";
    iter = function(v) {
      v.link = v.link.replace(s, r);
    };
  }
  else if (!url.indexOf("http://www.bbc.co.uk/radio4/today")) {
    iter = function(v) {
      v.link = v.enclosure;
    };
  }
  // else if...

  iter && feed.items.forEach(iter);
  feed.link_rewritten = true;
});

といった感じで、サイト毎に記事 URI の書き換え規則を定義しておくわけです。例ではリンク書き換えの「関数」を定義していく形になっていますが、"enclosure" 等を使う必要が無ければ "link" に対する「検索」と「置換」のペアを定義するだけで済むと思います。

また、この URI 正規化により、記事 URI を利用する他のスクリプト (はてブ件数表示など) にも効果が表れるはずです。


参照:
『livedoor Readerをはてブと合体』on IE
最速インターフェース研究会 - livedoor ReaderにSimpleAPIのサムネイルを加えるGreasemonkeyスクリプト


関連記事:
livedoor Reader で特定のサイトや記事の本文を非表示にする