基于 Node.js 的小工具,输入书名及可选作者,自动从微信读书平台搜索并下载阅读人数前三的书籍高清封面,保存到本地 covers 文件夹中。
- 书籍资源丰富:平台收录了海量正版中文书籍,覆盖文学、社科、经管、生活等各个领域,几乎能找到所有热门及经典书目。
- 封面尺寸统一:微信读书的封面图片尺寸高度统一,下载后无需额外裁剪或调整,直接适合用作书单展示、博客插图、个人收藏等。
- 稳定可靠:调用公开的搜索接口,返回数据格式固定,封面链接可直接拼接高清地址,长期可用且不易失效。
- 无需登录:搜索和封面下载均为公开资源,无需注册或鉴权,降低了使用门槛。
-
首次搜索获取参数
调用微信读书搜索接口https://weread.qq.com/api/store/search,传入书名关键词,从返回结果中提取sid和电子书分类(type=1)的scope值。 -
精确获取书籍列表
使用上一步获取的sid和scope再次请求同一接口(指定count=20),获得最多 20 本电子书的详细信息。 -
双重过滤与排序
- 筛选书籍时,书名必须包含输入的
title关键词;如果提供了author参数,则作者也必须包含该关键词。 - 若同时满足条件的书籍为空,则自动放宽过滤,使用全部返回的书籍。
- 按
readingCount(阅读人数)降序排列,取阅读人数最多的前 3 本。
- 筛选书籍时,书名必须包含输入的
-
高清封面地址构造
微信读书返回的封面 URL 通常为普通清晰度(路径含/s_),将其替换为/t9_即可获得高清大图。 -
下载为内存 Buffer
使用 axios 以 arraybuffer 模式将高清封面直接下载到内存中,避免中间落盘,为后续处理提供原始数据。 -
AI 超分 4x 放大
使用 UpscalerJS 加载 Real-CUGAN 4x 模型,对 Buffer 进行 4 倍分辨率放大。该模型基于深度学习,能智能重建细节,使小尺寸封面变为高清大图。输入输出均通过 TensorFlow.js 的 tf.node.decodeImage / encodePng 在内存中完成,不生成临时文件。 -
智能压缩降体积
超分后的图片为无损 PNG,体积巨大(单张可达 5MB+)。使用 sharp 库将其转为 mozjpeg 编码的高质量 JPEG(quality: 85,启用 progressive 和 chromaSubsampling: 4:2:0)。在肉眼几乎无法察觉质量损失的前提下,体积通常可压缩 90% 以上(例如 5MB → 400KB)。 -
文件保存
压缩后的 Buffer 以 书名_书名_Top1.jpg 的格式命名,统一存储在项目根目录下的 covers 文件夹。程序会自动创建该目录。
- Node.js:建议 v14 及以上版本。
- 依赖安装:本项目已在
package.json中固定了依赖版本,在项目根目录执行以下命令即可完成安装:
npm installnode index.js <书名> [作者]- 书名:必填,搜索的关键词。
- 作者:选填,若填写则只下载作者包含该关键词的书籍。
只按书名搜索:
node index.js 活着按书名和作者同时过滤:
node index.js 活着 余华运行后将依次下载匹配结果中阅读人数排名前三的书籍高清封面,保存至 covers 文件夹。
.
├── index.js # 主程序入口,负责流程编排
├── package.json # 依赖与版本锁定
├── package-lock.json
├── covers/ # 封面保存目录(自动创建)
├── models/ # 超分模型
├── src/
│ ├──tasks/
│ │ ├── search.js # 微信读书搜索 API 封装
│ │ ├── download.js # 封面下载为 Buffer
│ │ ├── upscale.js # UpscalerJS 4x 超分处理
│ │ ├── compress.js # sharp 智能压缩(PNG → 高质量 JPEG)
│ │ └── save.js # Buffer 保存为本地 JPG
│ └──utils/
│ └── progress.js # 展示终端进度条
└── README.md
- 搜索请求依赖网络,若频繁使用可能触发平台限流,建议合理控制请求频率。
- 若书籍无封面或搜索无结果,程序会给出相应提示并跳过。
- 文件名中的非法字符(如
\ / : * ? " < > |)会被替换为下划线,避免系统报错。
本项目采用 MIT License 开源,请查看 LICENSE 文件。