命令行云:rss2email

作者:Kyle Rankin

在我的上一篇文章中,我开始了名为“命令行云”的系列。该系列的目的是讨论如何在不借助 Web 浏览器的情况下使用我们现在面临的云服务。我大部分时间都在命令行上度过,因此我最希望在那里与云服务交互。我的上一篇文章描述了如何从命令行使用 Google 日历,而在本文中,我将讨论更通用的云服务——RSS 订阅源。如果我在几个月前写这篇文章,它会更侧重于取代 Google Reader 本身,因为那是我使用的主要 RSS 聚合器,但 Google 先发制人地扼杀了这项服务,让包括我自己在内的许多用户争先恐后地寻找替代品。尽管许多人能够找到某种基于 Web 的替代品,但我意识到我想要的主要功能(按日期排序故事和使用 vi 键绑定来查看下一个故事)在许多现有的 Google Reader 替代品中都缺失了。更糟糕的是,许多人正以此为契机,通过出售对 RSS 服务的访问权限来快速赚钱(当然,仍然在捕获每个人宝贵的 Web 浏览习惯)。

我决定采取完全不同的策略,将我的 RSS 订阅源转换为特殊邮箱中的电子邮件,并使用我已经习惯的界面:在命令行上使用 mutt 处理电子邮件。我决定使用伟大的 Aaron Swartz 编写的 rss2email 程序来管理我的订阅源。该软件下载 RSS 订阅源并将每个故事转换为其自己的电子邮件消息并发送给您。这意味着您可以使用任何您想要的电子邮件程序来阅读您的订阅源,但当然,由于我们在这里专注于命令行,我将只讨论 mutt。

安装和配置

rss2email 程序已经有 Debian 软件包,所以在我的系统上,安装它就像输入 apt-get install rss2email 一样简单。如果由于某种原因,它没有为您的发行版打包,请按照 http://www.allthingsrss.com/rss2email/getting-started-with-rss2email 上的步骤下载并解压 rss2email tarball。这是 Python 软件,因此您需要在系统上安装 Python 2.x 以及某种本地 Sendmail 程序(Postfix 或 Exim 也可以),或者,您需要确定一个可以用来发送这些电子邮件的外发邮件服务器。

一旦 rss2email 安装完成,您就可以通过 r2e 命令与其交互。要设置一个新的包含您的订阅源的 rss2email 数据库,请输入


$ r2e new youremail@yourdomain.net

请注意,您在此处使用的电子邮件地址将是 rss2email 将向其发送电子邮件消息的地址。数据库设置完成后,就可以向其中添加订阅源了。您可以使用以下命令执行此操作


$ r2e add http://feed.someurl.com/rss

或者,如果您碰巧有一个 OPML 文件(例如您可能在跳槽时从 Google Reader 导出的文件),您可以导入它


$ r2e opmlimport file.opml

在任何时候,您也可以将所有已配置的订阅源从 rss2email 导出为 OPML 文件


$ r2e opmlexport

添加一些订阅源后,您将需要轮询它们以获取新故事。现在,当您第一次针对这些订阅源运行 r2e 时,它将拉取订阅源中的所有故事,其中可能包括一些您已经看过的故事。如果您想避免这种情况,那么您第一次需要运行


$ r2e run --no-send

否则,运行


$ r2e run

第一次可能需要一段时间,因为它会读取您的所有订阅源并生成电子邮件。当然,默认情况下,它会将所有故事发送到您的 INBOX,因此由于我控制着我自己的邮件服务器,我为 rss2email 创建了一个特殊的电子邮件地址,然后设置了一个 procmail 规则,以便将发送到该地址的所有电子邮件消息转发到一个特殊的 rss 邮箱。

当然,rss2email 仅在您运行命令时更新您的订阅源,因此您可能希望在 cron 中运行它,以便它自动更新。只需以您的常规用户身份运行 crontab -e 并添加


* *     * * *    r2e run 2>/dev/null

这将每分钟运行 r2e,并将任何随机错误(例如当订阅源暂时关闭时)输出到 /dev/null,而不是每次都向您发送电子邮件。在大多数情况下,rss2email 可以按原样工作,但在我的情况下,我想更改两个额外的设置。为此,只需在文本编辑器中打开 ~/.rss2email/config.py 并添加以下设置


HTML_MAIL = 1
DATE_HEADER = 1

第一个设置告诉 rss2email 以 HTML 邮件形式发送电子邮件,第二个设置根据新闻报道的日期而不是它获取的日期来为消息添加日期。尽管您可能会惊讶于我在基于文本的电子邮件客户端中选择 HTML 电子邮件,但 mutt 会自动将 HTML 电子邮件转换为文本。此外,当我告诉 mutt 在外部查看器中打开电子邮件时,在纯 shell 会话中,这意味着我可以非常轻松地在基于文本的 Web 浏览器(例如 w3m)中查看完整文章。而且,当我在装有 Web 浏览器的机器上运行 mutt 时,它可以在那里打开完整文章。

管理订阅源

在 rss2email 中管理订阅源相对简单。首先输入 r2e list 以查看所有订阅源的编号列表。您将使用与订阅源关联的编号来管理它。例如,要删除编号为 12 的订阅源,您将输入


$ r2e delete 12

如果您想暂时忽略订阅源,您还可以使用 r2e pause number 暂停订阅源,然后使用 r2e unpause number 取消暂停。

Mutt 作为前端

对我来说,使此设置如此有效的原因是我可以使用我的常规邮件程序 mutt 来查看我的订阅源。这意味着我可以快速扫描我的订阅源并跳过无趣或重复的故事。在我的例子中,我发现我需要调整 mutt 显示此邮箱索引的方式,以便我可以更轻松地看到订阅源来自哪里。默认情况下,mutt 将 index_format 设置为


set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s"

因此,我设置了一个 folder-hook,以便当我在 rss 邮箱中时,我会得到一个略微调整过的索引


folder-hook rss 'set index_format="%4C %Z %{%b %d} %-20.20f  %s"'

我所做的主要更改是删除了显示消息大小的列 (%4l),并使其显示电子邮件的完整 FROM: 行,并在该列中给自己留出了一些额外的空间 (%-20.20f)。结果是一个更易读的订阅源列表,您可以在图 1 中看到。

图 1. Mutt 内的 RSS 订阅源

虽然确实我错过了新闻订阅源中的图像,但在许多情况下,这仅仅意味着我错过了广告或剪贴画。当我在装有 Web 浏览器的机器上运行 mutt 并查看 HTML 时,它会在 Web 浏览器内打开电子邮件,从那里,如果我愿意,我可以查看图像。对于那些仅发布文章摘要的订阅源,我可以点击超链接转到主文章并完整阅读。

以这种方式查看我的新闻可能看起来不如使用基于 Web 的客户端那样功能齐全,但它更灵活。此外,在我的例子中,我经常有数百个故事要仔细阅读,因此仅查看故事的文本版本有助于我专注于最重要的事情——数据。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常就安全和开源软件发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论