「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が混入していても阻止しません。ですので、悪意のないサイトの本文を取得するようにしてください。
すみません、自分の家と会社で使わせてもらっていたんですが、昨日からなぜか動作しなくなりました。
もしかしてGoogleReaderが仕様変更でもしたのでしょうか?
alert挿入して確認してみたところzキーのイベントすらキャッチできていないみたいなのですが・・・
何か情報がありましたらお願いします。
>> みうさん、egaさん
ご報告ありがとうございました。
先ほど調べて修正完了しました。
http://blog.fkoji.com/2008/03080250.html
修正版の動作を確認しました。
素早い対応ありがとうございました。
これからも愛用させていただきます。
素早い対応ありがとうございます。
今後も愛用させていただきます。
大変便利です。ありがとうございます。
LDR Full Feedのように外部サイトからSITEINFOを取得する計画はありますか?
可能であれば対応いただけると幸いです。
http://wedata.net/databases/LDRFullFeed/items
http://constellation.jottit.com/siteinfo
>>tkさん
ありがとうございます。
私もそうしたいなぁと思いつつ、手をつけていない状態です。。
こんにちは。
欲しかった機能そのものなのでとても嬉しいです。
で、ちょっと気になったのを一つ。
はてなキーワードを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”]’);
}
何かの機会があればご参考願います。
>> basyuraさん
修正案をバージョン0.60に反映いたしました。
今後ともよろしくお願いいたします!
便利ですね。ありがとうございます。
if (imgs.length) {
ここで、imgsがnullの場合例外出ますね。
if (imgs != null && imgs.length) {
これで回避しました。
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が相対パスな場合にいけるようにしてみました。