nianzhibai
|
738406162a
|
feat: add video blacklist management
Add backend blacklist tombstone APIs and hidden-video migration support.
Update the admin video management UI with blacklist tabs, restore actions, alignment fixes, responsive layout polish, and regression coverage.
|
2026-06-13 14:34:00 +08:00 |
|
nianzhibai
|
96e423b952
|
feat: 完善爬虫去重、上传进度和源文件删除
为脚本爬虫增加候选预算、重复 source 记录和默认爬虫标签,避免重复视频占满目标新增数量。
新增爬虫上传迁移进度上报和管理页上传卡片,让每个爬虫可以展示本轮上传处理情况。
为视频删除增加可选删除云盘源文件能力,补齐播放页、管理页交互,并为多个网盘驱动实现 Remove 接口。
补充相关测试并更新爬虫协议文档。
|
2026-06-11 22:42:11 +08:00 |
|
nianzhibai
|
3465b9e837
|
Fix drive card icon fallback
|
2026-06-08 19:07:53 +08:00 |
|
nianzhibai
|
5fc8e9ebb7
|
Improve drive scan task coordination
|
2026-06-08 17:37:58 +08:00 |
|
nianzhibai
|
397823bb8d
|
refactor: polish admin mobile management UI
|
2026-06-03 19:28:00 +08:00 |
|
nianzhibai
|
137cfbcf82
|
feat: add prebuilt installer workflow
|
2026-05-28 19:13:41 +08:00 |
|
nianzhibai
|
39ef2defcc
|
feat(spider91): 流式爬取 + 完成后统一入队 teaser + 封面失败标 failed
三件相关改动,主题都是 spider91 爬虫流程。
1. 流式爬取协议(取代旧的 "Python 凑齐 15 个再交 Go" 模型)
Python 端 (spider_91porn.py):
- 新增 --stream-output flag。开启后每解析出一个 video 直链就把
entry 作为一行 JSON 写到 stdout 并 flush。
- log() 在 stream 模式下走 stderr,避免污染 stdout JSONL 协议。
- --output FILE 仍生效,作离线归档用。
Go 端 (crawler.go):
- 新 startSpiderTargetNew() 异步启动 cmd,返回 stdout pipe。
- RunOnce 用 bufio.Scanner 按行读 stdout,每行解析后立即 processOne
(下载视频 + 封面 + UpsertVideo)。删掉旧 readSpiderOutput / 全 JSON
文件解析路径。
- Python stderr 转发到 backend log,前缀 [spider91:py]。
收益:Python 翻页找下一个 viewkey 与 Go 下载当前视频在时间上重叠,
最大化每条签名链接 e= 时间窗。今天观察到 Python 77 秒就找完 15 个
viewkey 全部 emit;如果还像旧模型那样要等 Go 串行下完才开始下一个,
后面几个的签名很容易过期(之前 8/15 全 EOF 的根因之一)。
2. teaser 在 crawler 完成后统一入队(取代每条入库立即 enqueue)
- main.go attachSpider91Crawler 不再注入 OnNewVideo callback。
- main.go runSpider91Crawl 在 Crawler.RunOnce 完成后调一次
enqueueDriveGeneration(driveID),让所有新视频统一进 teaser worker。
- 与 nightly Phase 2 的 "等 teaser 队列 idle" 语义自然对齐。
- 下载阶段不和 ffmpeg 抢 CPU/IO。
3. 网站封面下载失败时显式标 thumbnail_status='failed'
spider91 drive 的 thumb worker 按设计不处理 spider91 视频(封面应是
网站原图直接保存)。当网站封面下载失败时,url='' + status='pending'
会让 enqueueDriveGeneration 的 waitForThumbnailsBeforePreview 因为
CountVideosNeedingThumbnail > 0 把 teaser 卡死等待循环。
修复:crawler.go processOne 中 thumb 失败分支显式标 status='failed'
(CountVideosNeedingThumbnail 条件 status != 'failed' 会排除)。
今天观察到的现象:187 MB 视频 c2c04fc8602c5396d469 卡在
'[preview] waiting for 1 thumbnails before teaser generation'
循环 35 分钟。
测试:
- crawler_test.go 重构为 buildFakeSpiderScript helper,
生成支持 --stream-output 的伪 python(其实是 sh),逐行 echo JSON。
- TestCrawlerRunOnceFullFlow / TestCrawlerThumbDownloadFailureMarksStatusFailed
通过新 helper 验证流式协议 + thumb fail 闸门。
go test ./... 全绿;线上手动触发 spider91 抓取验证流式行为正确。
|
2026-05-27 18:48:30 +08:00 |
|
nianzhibai
|
d424fc0553
|
feat(spider91): 接入 91porn 爬虫作为新的视频源
把 91VideoSpider/spider_91porn.py 包装成一种 spider91 drive 类型,
每天凌晨自动从 91porn 本月最热第 1 页起翻页,跳过已知 viewkey 凑够
N 个新视频后停止;下载视频和封面到本地,接入现有的视频列表 / 详情
/ 标签 / teaser 流水线。
主要内容:
- Python 脚本:加 --target-new / --seen-viewkeys-file CLI 参数
- 后端:新增 drives/spider91 包(driver + crawler + 测试)
- 后端:catalog.ListVideoFileIDsByDrive 辅助查询
- 后端:crawlerLoop ticker(独立于 02:00-07:00 的网盘扫描循环)
- 后端:HTTP 客户端尊重 HTTPS_PROXY 环境变量 + 每 drive 可选 proxy
- 后端:视频文件后缀按直链 URL 真实后缀决定(mp4/webm/mkv/flv 等)
- 后端:所有 spider91 视频自动打 91porn 标签(source=system)
- API:新增 /p/spider91/{videoID} 路由用 http.ServeFile 服务本地文件
- 管理后台:下拉加 "91 爬虫" 类型;几处特例适配
(状态显示"已就绪"、操作显示"立即抓取"、扫描根列显示"上次抓取
N 小时前"、表单隐藏 root_id 等无关字段)
- 文档:README + plan 16 节完整记录
测试:20+ 新增用例覆盖 driver 路径安全、crawler 端到端(伪 python +
httptest 服务器)、扩展名识别、定时窗口判断。
|
2026-05-22 21:13:26 +08:00 |
|
nianzhibai
|
308227c031
|
chore: ignore TypeScript build info
|
2026-05-21 09:58:00 +08:00 |
|
nianzhibai
|
d4acc028e5
|
chore: sync latest frontend and backend refinements
|
2026-05-20 23:09:00 +08:00 |
|
nianzhibai
|
3506328441
|
Add PikPak drive support
Add PikPak backend driver, fixed tag matching, cached transcode playback, fast cover handling, and LF normalization.
|
2026-05-10 23:55:04 +08:00 |
|
nianzhibai
|
87866858b8
|
Initial commit: video aggregator with quark/115/wopan drivers
|
2026-05-10 17:07:20 +08:00 |
|