rss2imap とは
rss2imap は RSS (RDF Site Summary) で配信されているサイト要約を IMAP サーバにメールとして配信するツールです.
HTML がインラインで表示できるメーラと共に使うことで, RSS Reader のような 感覚で使うことができます. また, 記事の管理を IMAP が行うために, IMAPが 持つ未読管理の一元化といった機能が有効利用できます.
目次
- 主な機能
- 変更点
- スクリーンショット
- ダウンロード
- インストール
- とりあえず動かしてみる
- RSS サイトリストの編集
- デーモン化
- 特殊フォルダ
- その他
- これからの改善予定(優先順位の他高いもの順)
- 類似プロジェクト
- 謝辞
主な機能
- HTML のインライン表示の支援 (Thunderbird から借用)
- IMAP を使うことによって未読記事の一元管理が可能. 複数クライアントの時に便利
- IMAP over SSLに対応
- RSS のタイトル等から IMAP フォルダを動的生成
- サイトのアップデートを検知した場合は, メールの日付
を変更し未読にする.
更新確認として利用可能. - 一例として hatena アンテナのインポートが可能.
メールチェックとサイト更新の確認が同一操作に - 古い記事は自動的に削除
- channel モードとして動かすことで, 簡易アンテナとして動作可能
- If-Modified-Since を使うことで無駄なトラフィックを軽減
- ローカルに未読管理用のキャッシュを作らない
- デーモン化. cron がなくても動作する.
変更点
- version 0.2 : IMAP over SSLに対応するパッチを取り込み。
Term::ReadPasswordがインストールされてなくても動くようにした。
認証に失敗した場合に、「Authentication Failure.」及び接続情報を
表示するようにした。
Encode.pmが「Appropriate Encoding not found!」とエラーを出力す
るバグに暫定対処 - version 0.13: フォルダ名が小文字になるバグを修正
- version 0.12: expire-unseen パラメタの動作が逆になっていたのを修正
- version 0.11: 重大なバグの修正 (sleep していなく, 常に起動状態になっていた)
スクリーンショット
Thunderbird を使った場合です.
Thunderbird の blog 閲覧機能とほぼ同一の操作性が実現でき, IMAP による未読管理が可能です.
ダウンロード
- rss2imap は GNU General Public License で配布されるフリーソフトウェアです.
- 最新バージョンはsourceforge.jpからダウンロード可能です。
インストール
- Perl 5.8.0 以上(必須)
- 必須のPerlモジュール
- 推奨されるPerlモジュール
- Term::ReadPasswordは必須ではありませんが、インストールしないとパ
スワードを入力時に、入力文字列がコンソールに表示されます。(警告が出ます)
- Term::ReadPasswordは必須ではありませんが、インストールしないとパ
- 必須ではないPerlモジュール
- IO::Socket::SSLはIMAP over SSLを利用するときのみ必要です。
- IMAP サーバが動いているホスト (dovecot, courier-imap で確認済み)
- HTMLのインライン表示が可能なメーラ
Thunderbird, Outlook Express, Becky! 等
Perl モジュールは, perl -MCPAN -eshell 等を使って事前にインストールしてください.
rss2imap は, ほとんどの UNIX で動作すると思います.
Windows での動作は若干の変更が必要でしょう.
とりあえず動かしてみる
まずは, サンプルの RSS URL リスト (sample.url) について動作させてみましょう.
-o オプションを使いデーモン化を抑制していることに御注意下さい.
- courier-imap を使っている場合 (prefix を INBOX にする)
./rss2imap -o -s IMAPサーバ -u ユーザ名 -p INBOX sample.url
- dovecot を使っている場合は, prefix は nil でよい (default 動作)
./rss2imap -o -s IMAPサーバ -u ユーザ名 sample.url
- IMAP over SSLを使うときは、-Sオプションを指定します。ポート番号も変更する必要があるでしょう。
./rss2imap -o -s IMAPサーバ -S -P 993 -u ユーザ名 sample.url
メーラから IMAP サーバにアクセスしてみてください. RSS から始まるフォルダが作成され, 記事が転送されていると思います.
IMAPサーバのデフォルト値は localhost, ユーザ名のデフォルト値は 環境変数 USER の値が用いられます.
RSS サイトリストの編集
RSS のサイトの情報をファイルに記述します. サイトの性質等によって適当なグループを作ります. グループは固有の設定と RSS の URL リストを持ちます. 各グループの間には1行以上のスペースを入れてください.
# グループ1 の固有設定 設定1: 値1 設定2: 値2 .. http://foo1/foo.rdf http://bar1/bar.rdf # グループ2 の固有設定 設定1: 値1 設定2: 値2 .. http://foo2/foo.rdf http://bar2/bar.rdf
設定項目には以下があります.
設定名 | 値の条件 | 説明 |
folder | フォルダ名 | IMAP のフォルダ名です. このフォルダに配信されます. デフォルトは RSS.%{channel:title} となっており, 後述するマクロを使い 動的に生成されます. |
type | (items|channel) | items: RDF の item 1つづつを 1つのメールとして送信します (デフォルト) channel: 個々の item は無視し, RDF の全体 (channel) を1つのメールとして送信します. サイトの更新のみを知りたい時は channel を用います. サイトのアンテナのような動作が実現できます. |
sync | (yes|no) | yes: フォルダ中のメールとRSS item の同期を取ります. RSS に登録されて
いない item が フォルダに見つかると削除されます. RSS でサイトのランキングが配信されていて, 逐次 item の内容が更新され る場合や, Hatena アンテナのような更新サイトリストのような場合は 同期を取ったほうが便利な場合があります. no: 同期しません (デフォルト) |
expire | 整数 (N) | N日以前の item を削除します. -1 と指定することで expire の動作を抑 制できます (デフォルト) |
expire-unseen | (yes|no) | yes: expire の時に, 未読メールも削除します no: 未読メールは削除しません (デフォルト) |
expire-folder | フォルダ名 | expire の時に, 削除ではなく指定されたフォルダに移動します. デフォルトは
未定義となっており, 削除します.
また, 後述するマクロを使うことができます |
subject | 文字列 | メールの Subject: ヘッダを指定します. 通常はデフォルのままでかまいません.
また, 後述するマクロを使うことができます |
from | 文字列 | メールの From: ヘッダを指定します. 通常はデフォルのままでかまいません.
また, 後述するマクロを使うことができます |
マクロは folder, expire-folder, subject, from の値を
rss の内容から動的に生成する機能です.
具体的には以下があります.マクロがそれぞれの文字列に置換されます.
マクロ | 説明 |
%{host} | ホスト名 |
%{user} | ユーザ名 |
%{rss-link} | RSS の URL |
%{last-modified} | サーバが返す Last-Modifed ヘッダ |
%{item:link} | RSS item の link の内容 |
%{item:title} | RSS item の title の内容 |
%{item:description} | RSS item の description の内容 |
%{item:dc:date} | RSS item の dc:date の内容 (未定義の場合もある) |
%{item:dc:subject} | RSS item の dc:subject の内容 (未定義の場合もある) |
%{item:dc:creator} | RSS item の dc:creator の内容 (未定義の場合もある) |
%{channel:link} | RSS channel の link の内容 |
%{channel:title} | RSS channel の title の内容 |
%{channel:description} | RSS channel の description の内容 |
%{channel:dc:date} | RSS channel の dc:date の内容 (未定義の場合もある) |
ただし, type: channel と指定した場合は, %{item:*} の値と %{channel:*} の 値は同じになります.
デフォルトとして以下のような設定になっています
subject: %{item:title} from: <%{channel:title}>
例えば, 以下のように記述すると channel の title を使ってフォルダを動的に生成します.
folder: RSS.News.%{channel:title}以下が具体例です.
# はてなアンテナ. # アンテナの内容とフォルダ中のメールを同期する. folder: RSS.Anntena expire: 3 sync: yes http://a.hatena.ne.jp/foo/rss # フォルダごとに分けた Blog # Friend folder: RSS.Blog.Friend expire: 5 http://tahoo.org/~taku/diary/cl.rdf http://nais.to/~yto/clog/cl.rdf # IT folder: RSS.Blog.IT expire: 10 http://blog.japan.cnet.com/umeda/index.rdf http://kimuratakeshi.cocolog-nifty.com/blog/index.rdf # Idol folder: RSS.Blog.Idol expire: 15 http://manabekawori.cocolog-nifty.com/blog/index.rdf http://rosa.cocolog-nifty.com/blog/index.rdf # 自分の Wiki の更新日時だけを知りたい # type: channel, 簡易アンテナとして動作 folder: RSS.Wiki type: channel http://tahoo.org/~taku/wiki/wiki.cgi?action=RSS http://cl.naist.jp/index.php?cmd=rss # ニュース配信サイトのタイトルからフォルダ名を自動生成 # 2 日ぶんの記事を残し, 未読でも削除する. folder: RSS.News.%{channel:title} expire: 2 expire-unseen: yes http://www.atmarkit.co.jp/rss/rss2dc.xml http://www3.asahi.com/rss/index.rdf http://japan.cnet.com/rss/index.rdf http://japan.linux.com/japanlinuxcom.rdf http://slashdot.jp/slashdotjp.rss
デーモン化
動作確認ができたら, 定期的に動作するようにデーモン化します. -o オプションをはずして起動します.
./rss2imap -s IMAPサーバ -u ユーザ名 -p INBOX sample.url
デフォルトで 60分ごとに更新作業を行います. 時間を変更する時は -i オプションを使います. (30分ごとに変更)
./rss2imap -s IMAPサーバ -u ユーザ名 -p INBOX -i 30 sample.url
RSS のサイトリストは, 配信開始時に毎回読みこまれます.
そのため, rss2imap が動作中にサイトリストを変更しても実用上はほとんど問
題ありません.
特殊フォルダ
rssimap は RSS.last-modified という特殊フォルダを作成します.
各 RSS の最終更新日時(last-modified) を1メールとして保存し,
無駄な更新作業を抑制するために使います.
もし強制的に更新を行いたい時は, 該当メールをメーラから削除してください
フォルダ名を変更する場合は -m オプションを使います.
./rss2imap -m FOO.BAR.RSS.last-modified
その他
Proxy サーバを用いる場合は以下のように --proxy オプションを使います.
./rss2imap --proxy=http://foo.com:8000/ -s IMAPサーバ -u ユーザ名 sample.url
CRAM-MD5 の認証を行う場合は -c オプションを使います.
./rss2imap -c -s IMAPサーバ -u ユーザ名 sample.url
Debug モード (-d) で起動すると, IMAP サーバとのやりとりが出力されます.
./rss2imap -d -s IMAPサーバ -u ユーザ名 sample.urlデフォルト値を変更したい場合はソースの $DEFAULT_GLOBAL_CONFIG を編集して ください.
our $DEFAULT_GLOABL_CONFIG = { 'user' => $ENV{USER}, 'host' => "localhost", 'port' => 143, 'interval' => 30, 'last-modified-folder' => 'RSS.last-modified', 'prefix' => undef, 'cram-md5' => undef, };
これからの改善予定(優先順位の他高いもの順)
- opmlフォーマットの利用
opmlファイルから、設定ファイルを自動生成する。できればexportもできるように。 - テキストモードでの利用
現在はHTMLメールを生成して配信しているが、item,description 等を整形してテキストでメールできるようにする。 - 日本語対応
現行のrss2imapでもある程度は日本語が通るものの、日本語が含まれたフォルダ名を使うと文字化けすることが多いのをなんとかする。 - 設定ファイルの分離
ソースコード直打ちの設定を設定ファイルに分離する。コマンドラインでオプションを入力しなくても設定を変更可能にする。 - 複数文書要約技術の利用
内容が同一もしくは類似していると判断されると, Reference: ヘッダを使いスレッドとして繋げる. - 複数のメール送信プロトコルへの対応 IMAPのみでなく、SMTPにも対応したい。メール送信部分を分離する必要あり。
類似プロジェクト
rss2imapからforkしたもの、または似たようなことをやっているプロジェクト
GmailでRSSを管理しようというプロジェクトです。複数プロトコル対応、GMailのフォーマットに合わせたメール配信等、優れた点が多いです。
GmailRSSと似たようなことをやっていますが、rss2imapからforkしたものです。複数フォーマットのRSSに対応し、GMailに最適化されたメールを送信するものとなっています。
GMailで管理しようというプロジェクトが多いですが、私はGmailは好きではないので、自分の環境(IMAPサーバ)で極限まで幸せになることを目指してコードのHackを続けるわけです(´ー`; )
謝辞
2005年9月19日より、rss2imapのコードは原作者の工藤さんからmumumuが引き継ぎ、sourceforge.jpで管理しています。素晴らしいコードを作成して頂いた工藤さんに深く感謝します。
デーモン化の部分のコードは, 高林氏 の asamasid を参考にしました.
reversethis -> {gro} {tod} {umumum} {ta} {umumum}