fetchrss + emacs + mewでRSSを購読する
個人的にweb based RSS readerは嫌いなので仲間内でfetchmailっぽいinterfaceを提供するfetchrssを作ってみました。最初はC++で実装していたのですが、途中でparser書くのが面倒くさくなり結局Perlに逃げてしまった次第です(途中にrubyがあるけどrss libraryが使えないのでボツ)。動作概要としてはfetchmailみたくサイトからRSSフィードをfetchしparseしてentriesに落としたのちに、timestamp tableによる既読管理(~/.fetchrss)でチェックし、未読ならばコンフィグファイル(~/.fetchrssrc)のmdaフィールドにメール形式で投げるようになっています。例えばmdaをprocmailにしてmaildir形式にlocalに管理して購読することも可能ですし、RSS reader serverとして外部のメールアドレスに送信することも可能です。可能なのですがEmacsenにはprocmailに加えてemacs + mewな環境で購読することを薦めます。というよりそれを目的として作られているので。では早速使い方を説明します。
まず http://www.panicode.com/software/fetchrss/index.html にアクセスしてfetchrss-x.x.x.tar.gzをダウンロードします。fetchrssはただのPerlスクリプトですので簡単にインストールできます。またLWPとXML::Feedを使いますので別途インストールしておいてください。
% tar xzf fetchrss-x.x.x.tar.gz % cd fetchrss-x.x.x % su % make install
デフォルトでは/usr/local/binにインストールされます。場所を変えたい場合はMakefileをいじくってください。以上でインストールが完了しましたので、簡単なコンフィグファイルを書きましょう(sample-fetchrssrcが同封されています)。
~/.fetchrssrc:
defaults mda /usr/bin/procmail encoding ISO-2022-JP include site title uri body feed http://somewhere/RSS
mdaは必須フィールドです。/usr/bin/procmailの他に/usr/bin/sendmailも指定できます。その場合はtoフィールドやfromフィールドも適切に変更しましょう。
~/.fetchrssrc:
defaults mda /usr/sbin/sendmail ... to rss@somewhere from fetchrss@local ... ...
encodingにはmimeのencoding名を書きます。日本語メールはISO-2022-JPがほとんどなのでデフォルトのままで問題ありません。includeはメール本文に含む情報を指定します。siteはサイト名、titleはエントリのタイトル、uriはエントリのURI、bodyはエントリの本文となっています。またnohtmlを書いておくとhtmlをplainのままで埋め込みます。fetchmail同様、feed(fetchamilではpoll)ごとにも上記の設定を適用することができます。新しいfeedを追加したくなったら
% echo 'http://somewhere2/RSS' >> ~/.fetchrssrc
のようにしましょう。
これで
% /usr/bin/local/fetchrss
のようにすれば全feed取得できます。
さて次はmewで読めるようにしましょう。とはいってもprocmailを使えばmaildirにそのまま入れてくれるので基本設定だけでも購読はできます。ただfeedというのは日に日に増していくもので、それだけでmaildirがいっぱいいっぱいになってしまいます。なのでmewの自動整理機能を使ってfeedを整理できるようにしておきましょう。fetchrssはX-Mailerにfetchrss x.x.xという情報をいれるので、これを利用して+net/feedというフォルダに自動整理させるようにしましょう。
~/.mew.el:
(setq mew-refile-guess-alist '(("X-Mailer:" ("fetchrss" . "+net/feed"))))
これでSummery modeでM-oとすると整理対象を自動で検出してマークしてくれます。そのままxすれば自動整理完了です。ただ読むまえから整理しちゃうとメールがあちこちに飛んでいっちゃって、おまけにUマークも消えるので注意しましょう。
さて、feedを読んでいるとhtmlメールが多いことに気づくと思います。htmlタグを高速に脳内で変換できる人を除いて、ほとんどの人はそれを不愉快に思うでしょう。mewにはmew-w3mというemacs-w3mを利用したhtml rendererがあるのでこれを使います。
~/.mew.el:
(require 'mew-w3m)
これでSummery modeでhtmlメールにポイントし.すればw3m parserが動きだし適切にフォーマットしてくれます。これはこれで大変便利なのですが、いちいち.するのは非常に面倒です(人間の欲求は無限です)。それを知人に愚痴ったところ以下のようなコードを教えてくれました(多謝!)。
~/.mew.el:
(defadvice mew-summary-display (after mew-auto-analize-again activate) (mew-summary-analyze-again))))
これでnやpしたときに自動的にparserが動きだし.せずともhtmlメールを華麗に読むことができます。mewのUIはかなり特徴的で悪くいえばアクセシビリティのかけらもないのですが、ここまで環境を構築できればweb based rss readerさながらのUIを堪能することができます。nとpでどんどん読めますし、*でマークもできます。マークというのは非常に重要で、たとえばlivedoor readerがやっているようなpin機能はマークで実現できます。おまけにmewにはフォルダという概念がありますので、たとえば+net/feed/importantとかいうフォルダを作っておいてpinなマークをそのままmoxすることができます。またunder emacsですのでfeed内の文章をそのままキルヤンしたりもできます。その上検索もサポートされていますので、簡単に知識を抽出することができます(簡易knowledge base)。
また以下のように設定することによって簡単に外部ブラウザでそのエントリを確認することができます。ちなみに僕の外部ブラウザはemacs-w3m(すでに外部じゃない)です。
~/.emacs:
(global-set-key "\C-xM" 'browse-url-at-point)
~/.fetchrssrc:
feed http://somewhere/RSS include uri
include uriなfeedのメール本文にはエントリのURIが記述されますので、そこにポイントを合わせてC-xMしてください。
しばらく使ってみた感じでは大きな問題もなく、思っていたより使いやすいインターフェースで購読できてかなり満足しています。そして何よりmdaでprocmailに渡すところにesrの思想を感じます。thanks esr, but your thoughts about the configuration file is so crazy for foreigners.
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/fetchrss-emacs-mewrss30928cfc8aad3059308b/tbping