惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
T
Tailwind CSS Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
博客园 - 叶小钗
N
Netflix TechBlog - Medium
罗磊的独立博客
量子位
MyScale Blog
MyScale Blog
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
B
Blog
腾讯CDC
爱范儿
爱范儿
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
雷峰网
雷峰网
G
Google Developers Blog
Google DeepMind News
Google DeepMind News

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
使用 Calibre 的命令行工具下载新闻 - 少数派
2019-08-17 · via 少数派

Calibre 具有完善的新闻下载功能,可以从各种媒体的网站抓取最新的文章并生成电子书文件。得益于开源社区的贡献,它还内置了针对一千多个不同网站编写的配置方案(称作 recipe),并且更新非常及时。

但是,Calibre 的图形界面非常简陋且经常卡顿,使用起来体验较差。如果要使用定时下载新闻的功能,还必须保证软件一直在后台运行。另外,如果想在 Linux 服务器上运行 Calibre,一般也没有图形界面可用。

Calibre 一言难尽的图形界面

因此,使用命令行来下载新闻是更快捷、通用、且适合自动化的做法。本文将介绍用 Calibre 的命令行工具下载新闻的一般方法,然后在此基础上说明如何配置自动运行,并将下载好的文件通过不同方式传输到其他设备上阅读。

基本用法

Calibre 在命令行中的新闻下载功能是整合在其格式转换命令 ebook-convert 中的。其基本用法是:

ebook-convert "Title of news source.recipe" outputfile.epub

其中,第一个参数是 recipe 的名称。不过,Calibre 在文档中没有指出的是,在使用内置方案时,Title of news source.recipe 不是指内置方案的文件名,而是指新闻网站的全称,.recipe 不是扩展名,只是一个后缀。只有在找不到对应的内置方案时,Calibre 才认为该参数是自定义方案的绝对路径。

要知道自己想阅读的网站有没有专用的内置方案,除了可以在 Calibre 的图形界面的新闻下载界面中查询,还可以使用 ebook-convert --list-recipes 命令。例如:

$ ebook-convert --list-recipes | grep 'New York Times'
	New York Times Book Review
	New York Times Sports Beat
	New York Times Technology Beat
	The New York Times
	The New York Times (Web)

所以,如果要下载当天的《纽约时报》,完整的命令应该是

ebook-convert "The New York Times.recipe" nytimes.epub

下载所得的 EPUB 文件如下图所示,除个别特殊样式不能正常显示之外,整体效果比较令人满意。

用 Calibre 下载的报纸

定时下载报纸期刊

对于更新时间固定的报纸或期刊,在每次出新时手动下载显然是没有必要的。另外,最好能够在所下载文件的名称中标明日期,以便区分。

还是以下载每天的《纽约时报》为例。创建一个名为 getnyt.sh 的脚本文件(同时使用 chmod +x 为其增加运行权限),其内容为:

#!/bin/bash

TODAY=$(date +%m%d)
ebook-convert "The New York Times.recipe" nytimes-$TODAY.epub

这里,TODAY 变量使用了 date 命令的自定义日期格式功能,为下载的文件标注了日期。其他更复杂的日期格式可以用 man date 查阅。

下一个要解决的问题是如何让脚本定期运行。在 macOS 或 Linux 上,显而易见的答案是使用 cron。运行 crontab -e 打开 crontab 文件的编辑界面,在其中加入:

CRON_TZ=America/New_York
30 0 * * * /root/getnyt.sh >/dev/null 2>&1

这里用到了 CRON_TZ 变量来指定时区。《纽约时报》的更新时间是美国东部时间每天凌晨,虽然可以手工换算成国内时区,但直接使用纽约时区可以避免考虑夏时制的问题。30 0 * * * 指全年每月、每周七天的 0:30 分。类似地,对于一般每周四中午更新周刊内容的《经济学人》,相应的 cron 日程应该是 0 12 * * 4。(更详细的 cron 日程写法可以使用这个工具阅读并测试。)

最后,由于 Calibre 在下载新闻时会输出很多日志,这里用 >/dev/null 2>&1 让脚本静默运行。

将下载的期刊发送给其他设备

当然,新闻下载成电子书格式以后,终归还是要搬运到其他设备里阅读的。具体做法因需求而异,包括:

直接连接到服务器下载:如果你使用 iPad 等设备作为阅读器,那么可以直接使用 Documents 这类支持 SFTP 的文件管理工具登录服务器下载。

添加到 Calibre 资料库:如果你习惯用 Calibre 来管理所有的电子书,并且就是在平时存放 Calibre 资料库的电脑上运行脚本,那么可以考虑将下载好的电子书直接添加到资料库。Calibre 在命令行下使用 calibredb 工具来维护资料库,对应的完整命令形如:

calibredb add --with-library /path/to/library nytimes.epub

你还可以进一步使用 Calibre 的内容服务器功能在其他设备上访问下载好的新闻。

存入网盘:如果你是在远程服务器上运行 Calibre 下载新闻,那么更实际的方法或许是直接把下载好的电子书存进网盘。这可以通过 rclone 来实现。该工具支持包括 Dropbox、OneDrive 和 Google Drive 等各大主流在线存储服务,具体的配置方式可以参考官方文档。以 OneDrive 为例,配置好以后,在上文脚本后加入一行

rclone copy nytimes.epub onedrive:/Documents/News; rm nytimes.epub

即可将 Calibre 下载的期刊文件转移到网盘。

如果想使用百度网盘,那么也可以配置 BaiduPCS-Go,然后使用 BaiduPCS-Go upload命令来上传。

通过邮件发送:最后,你也可以考虑将下载好的新闻通过邮件形式发送。这对于 Kindle 用户可能尤其实用,因为可以配合 Kindle 的文档服务功能实现新闻推送的效果。

Calibre 内置了一个用于发送邮件的命令行工具 calibre-smtp。由于该命令涉及的参数太多,建议使用脚本和变量来控制。例如,下面片段的作用是以 Gmail 发送下载好的当日《纽约时报》(注意很多开启了两步验证的邮件服务需要配置专用密码)。

TODAY=$(date +%m%d)
DATELONG=$(date +%Y/%m/%d)
SMTP="smtp.gmail.com"
PORT="587"
USER="username"
PASSWD="password"
FROM="from@gmail.com"
TO="to@kindle.com"
MSG="Please find attached today’s New York Times. Have a good day!"

calibre-smtp --attachment nytimes-$TODAY.epub --relay "$SMTP" --port "$PORT" --username "$USER" --password "$PASSWD" --encryption-method TLS --subject "Today’s New York Times ($DATELONG)" "$FROM" "$TO" "$MSG"

额外考虑:Calibre 的网络环境配置

最后需要考虑的是,如果你的服务器本身访问新闻网站有困难,Calibre 也无法直接下载新闻。Calibre 遵从系统的代理设置,支持的代理类型为 HTTP 和 HTTPS,但不包括 Socks(但可以先通过 PrivoxyProxifier 这类工具转换)。对于 macOS,该设置位于「系统偏好设置」>「网络」>「高级」>「代理」;对于 Windows 10,则位于「设置」>「网络和 Internet」>「代理」。Linux 系统或者使用脚本的场景,则需执行:

export https_proxy=https://username:password@servername; export http_proxy=http://username:password@servername