F.Ko-Jiの「一秒後は未来」

「z」で本文を取得するGoogle Reader用Greasemonkeyスクリプト

(追記 2008-01-13) バージョン0.3までは、SITE_INFOのurlとサイト or フィードのURLが一致する場合のみ動作するようにしていましたが、バージョン0.4から記事のURLと一致する場合も動作するようにしてみました。

自分で修正する場合は、

        if (source.match(reg)) {

とある行を、

        if (source.match(reg) || link.match(reg)) {

と書き換えてください。

—————-

フィードの登録数が増えてくると livedoor Reader では最新の情報を追いきれないと最近思うようになっていたので、Google Readerに乗り換えることにしました。

ということで、Google Reader用に例の本文取得のGreasemonkeyスクリプトを移植しました。

スクリプトはこちらからどうぞ。
» google reader full feed changer – Userscripts.org

今回は正規表現ではなく XPath で本文箇所を指定できるようにしました。これについては、AutoPagerizeのソースコードを参考にさせていただきました。

gキーにすでにショートカットが割り当てられているので、「z」キーを割り当てるようにしています。

Google Readerでは記事ひとつずつを開いて読む形式なので、フォーカスのあたっている記事についてのみ本文を取得します。なので、「j → z → j → z ・・・」といった感じで操作することになります。

また、Google Readerのインタフェースでは必ずしもフィード配信元サイトのURLを取得できるわけではないので、ブログのドメインとRSSフィードのドメインが異なる場合には、SITE_INFOに両方のドメインを書く必要があります。

以下がSITE_INFOの例です。

var SITE_INFO = [
    {
        url:    'http://(rssblog.ameba.jp|ameblo.jp)/',
        xpath:  '//div[@class="subContents"]'
    },
    {
        url:    'http://(www|rss).itmedia.co.jp',
        xpath:  '//div[@class="newart"]',
        conv:   true
    },
];

文字コードがUTF-8でないサイトの場合は、2個目のように「conv: true」というオプションをつけます。

相対パスの画像については表示されません。取得してきた本文にJavaScriptが混入していても阻止しません。ですので、悪意のないサイトの本文を取得するようにしてください。

  1. ega より:

    すみません、自分の家と会社で使わせてもらっていたんですが、昨日からなぜか動作しなくなりました。
    もしかしてGoogleReaderが仕様変更でもしたのでしょうか?
    alert挿入して確認してみたところzキーのイベントすらキャッチできていないみたいなのですが・・・
    何か情報がありましたらお願いします。

  2. F.Ko-Ji より:

    >> みうさん、egaさん

    ご報告ありがとうございました。
    先ほど調べて修正完了しました。

    http://blog.fkoji.com/2008/03080250.html

  3. みう より:

    修正版の動作を確認しました。
    素早い対応ありがとうございました。
    これからも愛用させていただきます。

  4. ega より:

    素早い対応ありがとうございます。
    今後も愛用させていただきます。

  5. tk より:

    大変便利です。ありがとうございます。
    LDR Full Feedのように外部サイトからSITEINFOを取得する計画はありますか?
    可能であれば対応いただけると幸いです。
    http://wedata.net/databases/LDRFullFeed/items
    http://constellation.jottit.com/siteinfo

  6. F.Ko-Ji より:

    >>tkさん
    ありがとうございます。
    私もそうしたいなぁと思いつつ、手をつけていない状態です。。

  7. basyura より:

    こんにちは。
    欲しかった機能そのものなのでとても嬉しいです。

    で、ちょっと気になったのを一つ。
    はてなキーワードをRSS登録して読んでいるんですが、SITE_INFO に
    {
    url: ‘http://d.hatena.ne.jp/keyworddiary’,
    xpath: ‘//div[@class=”section”]’,
    charset: ‘euc-jp’
    }
    を登録しても拾ってくれません。これは中身が無い場合はクラス属性が「entry-body entry-body-empty」となるからです。
    そこで修正案を書いてみました。

    #77行目
    var body = getFirstElementByXPath(‘//div[@id=”current-entry”]//div[@class=”entry-body”]’);
    if(body == null) {
    body = getFirstElementByXPath(‘//div[@id=”current-entry”]//div[@class=”entry-body entry-body-empty”]’);
    }

    何かの機会があればご参考願います。

  8. F.Ko-Ji より:

    >> basyuraさん
    修正案をバージョン0.60に反映いたしました。
    今後ともよろしくお願いいたします!

  9. m.yamamoto より:

    便利ですね。ありがとうございます。

    if (imgs.length) {

    ここで、imgsがnullの場合例外出ますね。

    if (imgs != null && imgs.length) {

    これで回避しました。

  10. m.yamamoto より:

    function addTargetAttr(node, link) {
    var anchors = getElementsByXPath(‘//a’, node);
    if (!anchors) {
    return false;
    }
    for (var i = 0; i < anchors.length; i++) { anchors[i].setAttribute('target', '_blank'); var href = anchors[i].getAttribute('href'); if(href) anchors[i].setAttribute('href', toAbsolutePath(href, link)); } return node; } あと、こんな感じで、hrefが相対パスな場合にいけるようにしてみました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など