6 Commits
Author SHA1 Message Date
huyueandClaude Opus 4.7 9ddad90891 ci: deploy.yml 按分支分流(dev→srv1563674 / main·master→sf5-gpu-01)
Deploy / Build and deploy (push) Successful in 8s
prod 也接入自动部署:push main/master 在 prod GPU 机重建 content-harvester 容器。
对应在 sf5-gpu-01 上新增了实例级 gitea runner(label sf5-gpu-01)。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 10:46:02 +08:00
huyueandClaude Opus 4.7 3dc5f02aaf ci: 加 dev 自动部署工作流(push dev → 重建 content-harvester 容器)
Deploy / Build and deploy (dev) (push) Successful in 1m40s
.gitea/workflows/deploy.yml:push 到 dev 分支(或 workflow_dispatch)→ dev 开发机 runner
(标签 srv1563674)→ checkout → docker build → docker rm -f → docker run(env 走 --env-file .env,
内容来自 gitea repo secret CH_ENV_FILE)→ healthz 检查 → image prune。只触发 dev,master/prod 不碰。
部署参数(端口 8019 / 网络 ai-admin-cuiyue_default / 卷 content-harvester-profile / mem 2g)在 yml 的 env 块里。
DEPLOY.md / README.md 同步更新(dev 自动、prod 仍手动;前置:配 CH_ENV_FILE secret)。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:18:49 +08:00
huyueandClaude Opus 4.7 21c11fb04a fix(scraper): 视频简介不再抓 .video-detail 的广告位 + 模特/分类做 content
xchina 视频详情页没有真正的简介文本,.video-detail 面板就是 标题/模特/分类/系列名 + 一整块
「推广:…」广告位(a.cpc-text → xchina.click/prepare.html 的联盟跳转,常含 VPN/楼凤/约炮乃至
「幼女」「学生妹」等违规词)。旧 _extract_description 把整段面板 innerText + 那些"标签"链接一锅端
进 content,导致主站内容审核把整批视频资源 block 掉(实测一个 11 视频的系列页 0 条入库)。

改为:视频 content 只抓模特名 + 分类/系列名(限同源 xchina.co,排除 a.cpc-text / xchina.click /
prepare.html),拼成「标题\n模特: X · 分类: Y / Z」,抓不到就回退用标题;不再用面板 innerText、
也不用站点级 boilerplate 的 meta/jsonld 描述。图集 scraper 的标签查询也加上同样的广告/外站过滤(防御)。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:09:56 +08:00
huyueandClaude Opus 4.7 a1a93cc8e0 feat: 支持采集 xchina 图集(photos series)
新增图集 scraper(core/scraper_photos.py,继承 XChinaScraper 复用导航/反爬 helper):
系列页 .item.photo 翻页 → 详情页解析图片 URL 模板 + 总张数 + 模特/系列/日期/标签 →
construct-or-paginate 收集 images[](默认每套图最多 max_images=100 张)。

- ScrapedItem 加 media_kind(video|photo)/images/image_total/image_capped;to_ingest_dict 按
  media_kind 分流(photo → source_type=image / content_type=article / images[] / video_url=None)
- media.py 加 download_image / head_ok;extract_video_id 兼容 /photo/id-...(=extract_detail_id)
- jobs.py _process_uploads 按 media_kind 分流(视频:yt-dlp/ffmpeg;图集:逐张下载上传,边下边传边删)
- app.py /agents/{id}/invoke 按 content_url 路径 / agent_id / 载荷 media_kind 自动选 scraper;
  新增 max_images 参数(默认 DEFAULT_MAX_IMAGES=100,上限 MAX_IMAGES_CAP=2000)
- 主站不用改:复用现有采集 Skill,harvester 自动判图集/视频。图集回传 images[] 后主站自动跑图片 OCR 审核
- 已在 dev 实测:单图集详情页 / 系列页 / 视频回归 均通过

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 20:38:55 +08:00
huyue 70da2e1f23 docs: 加 DEPLOY.md(部署/更新/排查),.env*/*.local.md 入 gitignore 2026-05-12 18:14:41 +08:00
huyue 351301bf54 docs: 重写 README(功能/技术栈与结构/HTTP接口/配置/部署/与主站交互/反爬限制) 2026-05-12 18:14:41 +08:00