Newsboat

出自 ArchWiki

Newsboat 是一个在 MIT 许可证下获得许可的开源新闻聚合器。

出自 newsboat(1) § DESCRIPTION

Newsboat 是一个用于文本终端的 RSS/Atom 订阅源阅读器。RSS 和 Atom 是许多广泛使用的 XML 格式,用于传输、发布和聚合文章,例如新闻或博客文章。Newsboat 旨在用于 Unix 或类 Unix 系统(如 GNU/Linux、BSD 或 macOS)的文本终端。

Newsboat 是被弃用的 Newsbeuter 的一个 分支

安装

安装 newsboat 软件包。对于开发版本,安装 newsboat-gitAUR 软件包。

用法

Newsboat 在没有任何配置的订阅源的情况下无法启动。订阅源可以在 ~/.newsboat/urls 中配置。Newsboat 可以通过命令行启动:

$ newsboat

按下 ? 键可以查看所有快捷键绑定列表。快捷键绑定可以重新绑定,参见 #配置

管理订阅源

添加、删除和标记订阅源通过编辑 urls 文件完成。默认情况下,它是 ~/.newsboat/urls~/.config/newsboat/urls。在本节的剩余部分,我们将使用 ~/.config/newsboat/urls

提示: 除了本节中 Newsboat 特定的订阅源外,请务必查看 Web feed 文章以获取更多选项。

RSS 或 ATOM 源

要添加 URL,请使用您喜欢的文本编辑器打开 ~/.config/newsboat/urls 并添加 URL,每行一个

~/.config/newsboat/urls
https://archlinux.org.cn/feeds/news/
https://lwn.net/headlines/newrss

要添加通过用户名/密码限制访问的 URL,只需通过以下方式提供用户名/密码

~/.config/newsboat/urls
http://username:password@hostname.domain.tld/feed.rss

为了保护用户名和密码,请确保 ~/.config/newsboat/urls 具有适当的权限。Newsboat 还确保 URL 中的用户名和密码不会在其用户界面中显示。如果用户名中包含 @ 符号,请将其键入为 %40,以便可以将其与分隔用户名/密码部分和主机名部分的 @ 符号区分开来。

要将本地文件配置为订阅源,只需在本地路径前加上 file://

~/.config/newsboat/urls
file:///var/log/rss_eventlog.xml

HTML 作为源

如果 HTML 源可以通过用户提供的脚本转换为 RSS,则 newsboat 既可以执行此脚本,又可以使用输出。

这可以通过在配置文件中使用 filter: 前缀来完成。例如,编写一个脚本,可以从 stdin 读取 HTML 并将 RSS 或 Atom 订阅源打印到 stdout。将该脚本保存到 ~/.config/newsboat/html2rss.sh 并添加以下订阅源

~/.config/newsboat/urls
filter:~/.config/newsboat/html2rss.sh:https://myurl.com

标记订阅源

每个订阅源都可以分配 0 个或多个标签。这使得对订阅源进行分类变得容易,并且可以轻松地一次将命令应用于多个订阅源。

通常,~/.config/newsboat/urls 文件每行包含一个 RSS 订阅源 URL。要将标签分配给 RSS 订阅源,只需将其作为单个单词附加,并用空格或制表符分隔。如果标签需要包含空格,请在标签周围使用引号 (")(请参见下面的示例)。一个示例可能如下所示

~/.config/newsboat/urls
http://blog.fefe.de/rss.xml?html interesting conspiracy news "cool stuff"
http://rss.orf.at/news.xml news orf
http://www.heise.de/newsticker/heise.rdf news interesting

使用此配置启动 Newsboat,可以按 t 选择标签。选择标签 “news” 后,您将看到所有三个 RSS 订阅源。再次按 t 并例如选择 “conspiracy” 标签,将仅显示 http://blog.fefe.de/rss.xml?html RSS 订阅源。按 Ctrl-T 清除当前标签,并再次显示所有 RSS 订阅源,无论其分配的标签如何。

注意: 如果标签名称包含空格,则标签必须用 " 括起来

特殊标签

自定义订阅源名称

订阅源的名称可以使用 urls 文件中的特殊标签定义。只需在标签名称前加上 ~ 字符,标签名称将成为订阅源名称。

例如

~/.config/newsboat/urls
http://rss.cnn.com/rss/cnn_topstories.rss "~CNN Top stories"

将定义订阅源,其订阅源名称为 “CNN Top stories”

隐藏订阅源

可以通过在标签名称前加上 ! 来从常规订阅源列表中隐藏订阅源。

例如

~/.config/newsboat/urls
http://rss.orf.at/news.xml "!ORF News (hidden)"

隐藏订阅源的内容只能通过查询订阅源找到。

查询订阅源

可以通过创建所谓的查询订阅源从现有订阅源创建自定义订阅源:通过将文章与查询匹配生成的订阅源。查询订阅源在您的 ~/.config/newsboat/urls 文件中像普通订阅源一样定义。它们具有以下语法

query:FEEDNAME:FILTER_EXPRESSION [TAG ...]

与普通订阅源一样,查询订阅源具有名称 FEEDNAME,该名称显示在订阅源列表中。FILTER_EXPRESSION 的过滤器表达式语言在 newsboat 手册 中定义。查询订阅源可以选择性地标记,就像普通订阅源一样。请参见 #标记订阅源

基本示例

~/.config/newsboat/urls
"query:Example1:age > 1"
"query:Example2:(tags # \"example2\") and (title =~ \"example2\")"
"query:Example3:(rssurl =~ \"example3\") or (total_count > 3)"

第一个示例定义了一个名为 Example1 的订阅源,该订阅源将包含所有比一天更旧的文章

第二个示例定义了一个名为 Example2 的订阅源,该订阅源将包含所有订阅源被标记为 example2 并且文章标题与 example2 匹配的文章。此处 # 是 “包含” 运算符。

第三个示例定义了一个名为 Example3 的订阅源,该订阅源将包含所有订阅源 URL 与正则表达式 example3 匹配的文章,或者属于包含超过 3 篇文章的订阅源的所有文章。

注意: 查询订阅源定义必须用双引号括起来。因此,其声明中的任何其他双引号都必须转义

未读文章

要创建一个名为 Unread Articles 的订阅源,其中包含所有未读文章,请定义以下内容

~/.config/newsboat/urls
"query:Unread Articles:unread = \"yes\""

将多个订阅源合并为一个

查询订阅源的一个很好的用途是,当您关注的内容创作者的内容分散在多个订阅源中时。您可以使用查询订阅源将其所有内容合并到一个位置。

~/.config/newsboat/urls
"query:Metafeed:tags # \"metafeed\""
https://feed.url/1 metafeed !
https://feed.url/2 metafeed !
https://feed.url/3 metafeed !

诀窍是为每个单独的订阅源分配一个唯一的标签 - 这里我们使用了 metafeed - 以便我们可以在过滤器表达式中针对它进行匹配。我们还使用了 #隐藏订阅源 - 每个订阅源末尾的 ! - 以便各个订阅源不会显示在订阅源列表中。

过滤特定订阅源

如果订阅源包含您不想看到的内容,则可以使用查询订阅源对其进行过滤。例如,要监视您感兴趣的软件包更新,可以使用

~/.config/newsboat/urls
"query:Package Updates:(tags # \"packageupdates\") and (title =~ \"linux [0-9]|newsboat\")"
https://archlinux.org.cn/feeds/packages/ packageupdates !

此订阅源将仅显示 linuxnewsboat 的更新。

忽略文章

查询订阅源 一样,过滤订阅源的另一种方法是在您的 ~/.config/newsboat/config 中使用 ignore-article 命令。它具有以下语法

ignore-article FEEDURL FILTER_EXPRESSION

示例

~/.config/newsboat/config
ignore-article "https://feed/url1" "content =~ \"tele(phone|communications)\""                     
ignore-article "https://feed/url2" "title =~ \"text_1|text_2\""

第一个示例将忽略 https://feed/url1 中内容与 tele(phone|communications) 匹配的所有文章

第二个示例将忽略 https://feed/url2 中标题与 text_1|text_2 匹配的所有文章

忽略模式

与使用查询订阅源进行过滤相反,Newsboat 允许您决定如何处理与 ignore-article 命令匹配的文章:您可以删除它们或不显示它们。

~/.config/newsboat/config
# ignore-mode "download" # Default: Delete them.
# ignore-mode "display"  # Do not show them.

与查询订阅源的比较

就纯粹的过滤而言,您可以使用 ignore-article 完成的任何操作,也可以使用 查询订阅源 完成。

查询订阅源在您的 ~/.config/newsboat/urls 文件中定义,而 ignore-article 命令放置在您的 ~/.config/newsboat/config 中。因此,如果您希望将所有与订阅源相关的内容放在一个位置,您可能希望坚持使用查询订阅源。

但是,如果您想节省空间并阻止 newsboat 下载某些文章,那么使用 ignore-article 是您唯一的选择。

配置

Newsboat 行为的几个方面可以通过配置文件进行配置,默认情况下,该配置文件位于 ~/.newsboat/config~/.config/newsboat/config 中。此配置文件包含以下形式的行

<config-command> <arg1> ...

配色方案

该软件包在 /usr/share/doc/newsboat/contrib/colorschemes/ 中附带了许多方案,可以使用 include 命令加载,如下所示

include /usr/share/doc/newsboat/contrib/colorschemes/inkpot

附加选项

配置文件还可以包含注释,注释以 # 字符开头,并一直延伸到行尾。要输入包含空格的配置参数,请在整个参数周围使用引号 "。甚至可以将外部命令的输出集成到配置中。两个反引号 ` 之间的文本被评估为 shell 命令,其输出放在其位置。这就像 Bourne 兼容 shell 中的反引号评估一样工作,并允许用户在配置中使用来自系统的外部信息。

有关示例配置,请参见 [1][2]

注意: 要查看配置命令的完整列表,请查阅 newsboat(1) § CONFIGURATION COMMANDS

技巧与窍门

自动重载订阅源

Newsboat 可以在启动时使用以下配置自动重载所有订阅源

auto-reload yes

通过此设置,Newsboat 还会运行定期自动重载 - 默认情况下,每 60 分钟一次。自动重载之间的时间间隔(分钟)可以像这样配置

reload-time <desired number of minutes>

或者,使用 cronsystemd 自动重载订阅源。只需在您的 crontab 中添加一行,或者创建一个 systemd 服务/计时器单元组合,发出以下命令

/usr/bin/newsboat -x reload

并行加载订阅源以加快更新速度

默认情况下,Newsboat 将尝试按顺序更新 ~/.newsboat/urls 中的条目;但是,以下设置将一次并行更新 n 个条目。根据您的喜好调整 n。

reload-threads 100

将文章 URL 传递给外部命令

一个小技巧允许将文章的 URL 传递给外部命令。这个想法是使用宏将 Newsboat 打开文章的浏览器设置为某个其他命令的路径,然后再将其更改回来。

例如,特定 youtube 频道的订阅者可以使用 mpv 打开视频,通过执行以下操作

macro y set browser "mpv %u" ; open-in-browser ; set browser "elinks %u"
注意: 首先按下 , 键,然后按用于宏的快捷键。在上面的示例中,键入 , + y

子标题

还有另一个小技巧,允许用户添加子标题以更有效地对订阅源进行排序。此技巧涉及向 urls 文件添加虚假订阅源,如下所示

---Heading---
注意: --- 字符是可选的,但使用某种字符来标识标题对于样式设置很有用。

然后在 ~/.config/newsboat/config 中,添加以下两行

highlight feedlist "---.*---" COLOR_OF_YOUR_CHOOSING default bold
highlight feedlist ".*0/0.." default default invis

当然,将 COLOR_OF_YOUR_CHOOSING 替换为 newsboat 支持的颜色

此技巧还可以与标签交互,方法是将 ---Heading--- 替换为

"query:---Heading---:tags # \"Tag\""

然后使用 Tag 标记标题下的所有订阅源。

故障排除

Newsboat 无法启动

Newsboat 在没有任何配置的订阅源的情况下无法启动!要添加 URL,请参见 #管理订阅源。如果这不是问题所在,请检查是否正在运行 Newsboat 的另一个实例。Newsboat 对其数据库发出锁定,以便一次只有一个实例可以访问它;因此,尝试打开第二个实例将失败。

参见