rss2imap

$Id: index.html,v 1.3 2005/09/19 08:46:10 mumumu-org Exp $

rss2imap とは

rss2imap は RSS (RDF Site Summary) で配信されているサイト要約を IMAP サーバにメールとして配信するツールです.

HTML がインラインで表示できるメーラと共に使うことで, RSS Reader のような 感覚で使うことができます. また, 記事の管理を IMAP が行うために, IMAPが 持つ未読管理の一元化といった機能が有効利用できます.

目次

主な機能

変更点

スクリーンショット

Thunderbird を使った場合です.
Thunderbird の blog 閲覧機能とほぼ同一の操作性が実現でき, IMAP による未読管理が可能です.

ダウンロード

インストール

Perl モジュールは, perl -MCPAN -eshell 等を使って事前にインストールしてください.

rss2imap は, ほとんどの UNIX で動作すると思います.
Windows での動作は若干の変更が必要でしょう.

とりあえず動かしてみる

まずは, サンプルの RSS URL リスト (sample.url) について動作させてみましょう.
-o オプションを使いデーモン化を抑制していることに御注意下さい.

メーラから 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,
    };

これからの改善予定(優先順位の他高いもの順)

類似プロジェクト

rss2imapからforkしたもの、または似たようなことをやっているプロジェクト

  • GMailRSS
    GmailでRSSを管理しようというプロジェクトです。複数プロトコル対応、GMailのフォーマットに合わせたメール配信等、優れた点が多いです。
  • Feed2gmail
    GmailRSSと似たようなことをやっていますが、rss2imapからforkしたものです。複数フォーマットのRSSに対応し、GMailに最適化されたメールを送信するものとなっています。

    GMailで管理しようというプロジェクトが多いですが、私はGmailは好きではないので、自分の環境(IMAPサーバ)で極限まで幸せになることを目指してコードのHackを続けるわけです(´ー`; )

    謝辞

    2005年9月19日より、rss2imapのコードは原作者の工藤さんからmumumuが引き継ぎ、sourceforge.jpで管理しています。素晴らしいコードを作成して頂いた工藤さんに深く感謝します。

    デーモン化の部分のコードは, 高林氏 asamasid を参考にしました.


    reversethis -> {gro} {tod} {umumum} {ta} {umumum}
    SourceForge.jp