在电纸书上稍后阅读长文
可能出于对自己阅读兴趣的自信,又或者真的需要大量读小说/专业书籍/盗版or正版电子书,总之你购买了一个电纸书(E-Ink阅读器)。
问题在于,日常生活、网上冲浪时,大量信息并不是一份独立、完善的「书籍」,而是一篇篇网页文章,散落在互联网上。电纸书针对「书籍阅读」开发,难以应对这种松散场景。因此,我们需要一些开源软件的帮助:稍后阅读软件「Readeck」和一个阅读软件「KOReader」。
1. 搭建Readeck
首先,我们需要把散落的文章收集汇总到一处。
为了方便手机收集文章,最好是在一个有公网IP/域名的设备上运行Readeck。
假设现在已经有了一个IP地址为 114.514.191.180
的Linux服务器,只需要按官方手册指南下载二进制安装即可:
首先创建文件夹:
mkdir -p readeck-install
cd readeck-install
从这里下载最新的分发文件,记得把链接替换一下:
wget -O readeck https://codeberg.org/readeck/readeck/releases/download/0.19.2/readeck-0.19.2-linux-amd64
chmod a+x readeck
由于readeck默认不是后台模式,用 screen
新建一个进程页面:
screen -S readeck
./readeck serve
然后可以按 Ctrl+c
数次退出,并编辑 config.toml
,修改下面部分:
[server]
host = 127.0.0.1
port = 8000
为
[server]
host = 0.0.0.0
port = 8000
并把服务器防火墙的 8000
端口放行。
2. 配置readeck
访问服务器对应端口(这里是 http://114.514.191.180:8000
),会要求你进行初次用户注册。
注册之后,我们可以参考少数派的这篇文章设置浏览器扩展、iOS快捷方式。
对应的OPDS域名应为 http://114.514.191.180:8000/opds
如果想一次性把所有收藏的网页下载为一份电子书,需要创建收藏集。具体路径为 http://114.514.191.180:8000/bookmarks/collections
,在里面输入筛选条件。
3. 配置KOReader
由于我用的安卓电纸书,直接从GitHub下载apk安装就行。
为了通过OPDS浏览Readeck,请参考KOReader Wiki的这个章节。
注意,根据这个commit,Readeck已经移除了「应用密码」功能。所以在通过KOReader访问Readeck的OPDS时,下方的密码需要填入Readeck生成的API密钥。
附:Readeck对API密钥的说明
作为密码
或者,您可以将此令牌用作 HTTP 基本身份验证的密码。
例如,如果应用程序仅接受用户名和密码,您可以将此令牌作为密码提供。 用户名被忽略,可以是任何值,包括空值。
可以一条条查看,也可以通过收藏集合并下载为一个文件。
4. 一键清空书签的elisp代码
Readeck并未提供批量选择功能,因此写了一段小elisp代码来执行相关功能,需要安装 plz
包:
(defun my/delete-all-readeck ()
(interactive)
(let* ((api-token "用生成的API替换这里")
(server-url "用readeck服务器链接替换这里,带http、端口,不带斜杠,如http://114.514.191.98:8000")
(bookmarks (plz 'get (concat server-url "/api/bookmarks")
:headers `(("User-Agent" . "tomoemami/emacs")
("Authorization" . (concat "Bearer " api-token))
("Accept" . "application/json"))
:as #'json-read)))
(dolist (bookmark (seq-into bookmarks 'list))
(when-let* ((id (alist-get 'id bookmark)))
(call-process-shell-command (concat "curl -X DELETE '" server-url "/api/bookmarks/" id "' -H 'accept: application/json' -H 'Authorization: Bearer " api-token "' -H 'User-Agent: tomoemami/emacs'") nil 0)))
(message "Readeck bookmarks DELETED")))