ABOUT
这个站点是怎么来的
一个命令行工具:抓取 → 本地数据仓库 → 静态站点。没有数据库、没有后端、没有前端框架。
本归档默认只保存元数据与封面缩略图,不下载视频文件:详情页的播放源指向源站 CDN。
需要离线观看时,在详情页点「保存视频到本地」——浏览器会流式写入你选择的位置(Chrome/Edge 可实时看进度、随时取消),
也可以用命令行
node src/cli.mjs save <id> 存进 media/videos/ 后重新构建。
内容版权归原作者与原站所有,请勿用于再分发。
流水线
crawl → 解析 /wp-json/wp/v2/:文章、分类、标签、演员
enrich → 逐篇抓取详情页:时长、mp4 直链、封面、会员锁定状态
media → 下载 320x180 缩略图,生成本地资产清单(路径 / 字节 / sha256)
build → 归一化数据集 + 生成静态站点(本页面所在的站)
为什么这么拆
- 元数据优先走 REST:分类/标签/演员的 term id 比解析列表页可靠,且响应带
X-WP-Total分页信息。 - 详情页单独补全:时长和视频直链只存在于详情页的 schema.org 标记里,放到独立阶段可以按需限量、断点续跑。
- 媒体与数据分离:封面按
media/thumbs/<id>-<hash>.<ext>落地,清单记录哈希,verify可逐张校验。 - 渲染与数据解耦:前端只读
assets/data/library.json,因此搜索筛选全部在浏览器里完成,站点可以纯离线使用。
目录结构
| 路径 | 说明 |
|---|---|
src/cli.mjs | 一体化入口:crawl / enrich / media / build / serve / stats / verify / doctor |
src/crawl/ | REST 采集、详情页补全、缩略图下载 |
src/lib/ | HTTP 客户端(限速/重试/缓存)、HTML 提取、文本与文件工具 |
src/build/ | 静态站点生成器与前端资源 |
data/dataset.json | 归一化后的数据集,构建时唯一读取的数据文件 |
data/cache/ | 请求缓存与详情补全结果,删掉只会变慢,不会丢数据 |
media/thumbs/ | 本地封面资源 |
dist/ | 构建产物:可直接双击 index.html 或托管到任意静态服务器 |
常用命令
node src/cli.mjs all # 全量:抓取 + 补全 + 封面 + 构建
node src/cli.mjs all --limit 500 # 小样本快速验证
node src/cli.mjs build # 只用本地数据重建站点
node src/cli.mjs serve --port 4173 # 本地预览 dist/
node src/cli.mjs stats # 终端里查看数据仓库概览
node src/cli.mjs verify # 校验本地资产完整性
当前归档
| 数据源 | https://qosvideos.com |
| 归档条目 | 5,541(站点共 5,541 篇) |
| 本地封面 | 5,540 张 · 367 MB |
| 总时长 | 483 小时 |
| 数据时间 | 2026-11-01T03:30:28.836Z |
| 构建时间 | 2026-11-01T03:31:19.269Z |
验证
运行 node src/cli.mjs verify 会把数据集里每一条封面记录与磁盘文件比对:文件是否存在、字节数是否一致、是否有清单之外的孤儿文件。