Newsboat
Newsboat 是一个在 MIT 许可证下获得许可的开源新闻聚合器。
- 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
。
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
- 有关使用此策略的多个示例,请参见 graysky 的 newsboat repo。
- 有关更多讨论,请参见 Possible to config newsboat to look at a web exposed directory and report changes #1157。
标记订阅源
每个订阅源都可以分配 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 !
此订阅源将仅显示 linux 和 newsboat 的更新。
忽略文章
与 查询订阅源 一样,过滤订阅源的另一种方法是在您的 ~/.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 中的反引号评估一样工作,并允许用户在配置中使用来自系统的外部信息。
技巧与窍门
自动重载订阅源
Newsboat 可以在启动时使用以下配置自动重载所有订阅源
auto-reload yes
通过此设置,Newsboat 还会运行定期自动重载 - 默认情况下,每 60 分钟一次。自动重载之间的时间间隔(分钟)可以像这样配置
reload-time <desired number of minutes>
或者,使用 cron 或 systemd 自动重载订阅源。只需在您的 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 对其数据库发出锁定,以便一次只有一个实例可以访问它;因此,尝试打开第二个实例将失败。