已读完的书挪进「书籍」,抓取上限去掉(8 -> 整架 26 本)

抓取范围
- TOP_N 默认从 8 改成 0=不限制。原来那个 8 是我拍的「最近动过的前 8 本」,
  不是接口限制;整架 26 本也就 1+26 个请求,完全够用
- --top N 仍可用,想只抓最近几本时加

分组调整
- 「最近在读」只留 progress < 100 的(20 本),进度条不再出现 100%
- 新增「书籍」区底部的「微信读书 · 已读完」分组(6 本),卡片结构与手工
  书单一致,左上角带「已读完」徽标;因为微信读书的数据没有书评/简介,
  这一组点击直接跳 weread.qq.com,不弹窗
- 这一组带 data-weread-card + data-category="微信读书",所以搜索框和
  「领域」筛选同样作用得到;领域筛选里会多出一个「微信读书」选项
- 筛选逻辑把 [data-book-card] 的选择器扩成 [data-book-card],
  [data-weread-card],分组计数也一并算上

实测数据分布(整架 26 本)
- 已读完 6 / 在读中 16(1%-97%)/ 没开始 4(0%)

静态验证(dist/bookshelf/index.html)
- 在读区 20 张卡片,进度条 30/0/77/28/13/97/0/5/16/3/10/1/4/13/4/0/1/10/6/0,
  区内无「已读完」字样
- 已读完分组 6 张卡片,6 个徽标、6 个微信读书跳转链接,均带 data-weread-card
- 手工书单 3 张卡片未受影响;领域筛选新增「微信读书」按钮
This commit is contained in:
dsh
2026-09-15 10:45:29 +08:00
parent 95dd0d9552
commit 4df235ea21
5 changed files with 288 additions and 16 deletions
+9 -2
View File
@@ -287,7 +287,7 @@ src/data/reading.json
src/components/bookshelf-content.astro
```
- 刷新数据:`pnpm reading`(失败会明确报错并 exit 1);`pnpm reading --top 12` 可改抓取条数(默认 8)
- 刷新数据:`pnpm reading`(失败会明确报错并 exit 1)。默认抓**整架**(1 + N 个请求,书架几十本完全够用);想只抓最近动过的几本就 `pnpm reading --top 12`
- **`pnpm build` 会自动先跑一次抓取,但用 `--soft` 模式**:微信读书挂了 / Key 过期 / 断网时,保留上一次的 `reading.json` 继续构建,**不会阻塞部署**
- `src/data/reading.json` 是数据快照,**要提交进 git**,这样 CI 或新克隆的仓库没 Key 也能构建
- Key 申请:<https://weread.qq.com/r/weread-skills> 扫码,拿到 `wrk-` 开头的串,写进 `.env` 的 `WEREAD_API_KEY`(`.env` 已 gitignore)。**只在本地构建**时用得上 —— `deploy.sh` 是本地构建再 rsync,凭据不会上传服务器;如果另外接了 Vercel / GitHub Actions 构建,要在那边单独配 secret
@@ -302,7 +302,14 @@ src/components/bookshelf-content.astro
- `category` 是 `文学-外国文学` 这种「大类-子类」复合串
- 时间戳统一按 `YYYY-MM-DD` 展示(官方硬性要求),顺带避开「N 天前」在静态站上会随构建时间变旧
展示逻辑:过滤掉私密阅读(`secret === 1`)和从没打开过的书;读完的照常显示,标「已读完」;0% 标「还没开始」;有声书不管。
展示逻辑:
| 归到哪 | 条件 |
|---|---|
| 最近在读 | `progress < 100`(含 0%,标「还没开始」) |
| 书籍 → 「微信读书 · 已读完」分组 | `progress === 100` |
这一组混在「书籍」区的网格里,卡片结构和手工书单一致,但没有书评/简介,所以点击是直接跳微信读书而不是弹窗。它们带 `data-weread-card` 和 `data-category="微信读书"`,所以搜索框和「领域」筛选同样作用得到(领域里会多出一个「微信读书」选项)。过滤掉的:私密阅读(`secret === 1`)、从没打开过的书;有声书不处理。
**2. 书籍** —— 来自 `public/data/books.json`,由 `bookshelf-content.astro` 在构建时 import(文件必须存在)。另外两个文件 `papers.json` / `comics.json` 对应的漫画、论文分类已经移除,文件保留但不再被引用。