枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

LDR Full Feed 0.0.11

本文予想機能を付加。あと関数の名前の変更とかいろいろ。
LDR Full Feed for Greasemonkey
LDRFullFeedforUC.user.js

本文の予想機能

汎用SITEINFOでは開けない場合が結構あるので、その際の補完に本文予想機能を付加した。
完璧ではないのでとりあえず開けなかった際にbodyごと開くのは次に見送り。
あと、文字コードはやはり指定されていないと開けないので、汎用SITEINFOで開くのに失敗したときにだけ使うことにした。

function searchEntry(htmldoc) {
  var max = 0;
  var entry = [];
  var data;
  var xpath = [
    '//*',
    '[(..//h2) or (.//h3) or (.//h4) or (.//h5) or (.//h6) or (..//*[contains(concat(@id,@class,""),"title")])]',
    '[not(.//form)]',
    '[not((.|.//*)[contains(concat("",@class,""),"robots-nocontent")])]',
    '[not((.|.//*)[contains(concat(@id,@class,""),"side")])]',
    '[not((.|.//*)[contains(concat(@id,@class,""),"navi")])]',
    '[not((.|.//*)[contains(concat(@id,@class,""),"footer")])]',
    '[not((.|.//*)[contains(concat(@id,@class,""),"header")])]',
].join('');
  try {
    var elms = getElementsByXPath(xpath, htmldoc);
    if(elms) Array.forEach(elms, function(e){
      // var n = e.getElementsByTagName('br').length;
      var n = e.textContent.length;
      if(max < n){
        max = n;
        data = e;
      }
    });
    entry.push(data);
    return entry;
  }catch (e){
    return null;
  }
}

のところが該当箇所。作成に当たってはid:ttooさんやid:mattnさんのコメント、id:snj14さんの
Twitter / snj14: strong要素,h1-h6要素があるところは本文. ...

strong要素,h1-h6要素があるところは本文.robots-nocontent指定のあるところ,form要素のあるところ,classにsidebar,navi,header,footerがあるところは本文でない.ような気がする.

を参考にさせていただきました。ありがとうございます。
h2とclassがtitleのものの判定は、本文とみなせるものに並列している場合が意外と多かったので.//h2ではなく、..//h2のようにしてあります。
こうしたほうがいいよみたいなことがあれば教えていただけるとうれしいです。

補足

Google Reader Full FeedをみてCDATAできれいに書けることがわかりました。ありがとうございます。