之前已经实现:增强版:苹果cmsV10增加影片网盘下载分享、电报频道搜片/采集功能 - N把刀
这里的主要问题:网盘资源没有做检测,可能早已失效,需要去逐个点击分享链接去筛选测试,所以,才打算给这个功能升级一下,不仅可以做到检测分享是否有效,而且还能自动转存资源到自己的网盘,再配合网盘拉新还能挣顿饭钱。
基础环境:苹果cms v10 + pansou + cas-x
原理:升级后的“一键搜片”的“自有转存”可以理解为一条由网站、编排服务和 CAS-X 共同完成的自动化流水线。前台负责发起请求和展示进度,网站负责维护影片状态与发布结果,后台编排服务负责搜索、筛选和转存,CAS-X 负责实际的网盘操作。
用户在影片页点击“一键搜片”后,前端脚本提交 vod_id。PHP 接口会检查功能开关、影片是否存在和请求频率,然后创建或复用任务,并返回一个任务回执。前端拿着回执轮询,按事件显示“搜索资源、发现候选、验证资源、转存资源、生成分享”等阶段。任务超过一定时间后会转入后台自动处理,用户关闭弹窗也不会中断处理。

服务端会先根据影片的 media_revision 计算当前媒体身份,包括电影或剧集类型、季数和已有集数。系统先检查数据库中是否已有可用的已发布链接,并计算每个网盘还缺哪些集。已有完整资源的网盘直接返回;只有缺资源或链接失效的平台才会进入新的转存任务。这样可以避免重复转存,也支持“部分网盘已经可用、部分网盘继续处理”的状态。
后台收到任务后,通常按网盘分别处理。它先调用 PanSou 搜索候选分享,再按影片名称、年份、季集和文件结构筛选候选。对候选链接,系统会通过 CAS-X 预览目录,确认其中确实包含所需的视频文件,而不是只根据分享标题判断。当前策略要求来源网盘和目标网盘一致,跨网盘转存默认关闭。
候选通过验证后,系统会检查目标网盘目录是否已经存在、当前账号是否有效、空间是否足够,以及已有文件覆盖了哪些集数。只转存缺少的内容,并在转存后再次扫描目标目录确认完整性。只有 CAS-X 返回的目标目录通过完整性校验,系统才会调用对应网盘的发布器生成分享链接。发布成功后,编排服务通过带签名的回调通知 PHP,PHP 再以事务方式更新网盘子任务、发布记录和任务事件。
剧集资源还支持复用 CAS-X 的原生追更任务。首次处理成功后,系统可以为该剧建立持久化的 CAS-X drama task,后续更新由 CAS-X 继续执行;网站主要负责影片身份、缺集计算、来源维护、完整性校验和发布状态同步。管理员也可以在来源管理界面手动添加、排序、检测或暂停来源,手动确认的来源会被标记为可信锚点,并参与后续追更。
手动编辑更新源

失败处理采用分层重试:
- 没有找到候选资源时,按约 20 分钟、2 小时、8 小时、24 小时的节奏继续尝试。
- 编排服务暂时不可用时,任务进入
retry_wait,按指数退避重试。 - 网盘账号失效会进入
needs_auth,等待管理员处理。 - 网盘空间不足会进入
capacity_full,暂停自动转存。 - 影片内容更新后,旧的
media_revision会被视为过期,旧任务停止继续重试,避免新旧季集混淆。 - 已发布链接还会定期复检,失效后先进入观察和复核流程,确认失效才撤下或重新获取。
一句话概括:一键搜片不是简单地“搜到链接后转存”,而是以影片版本和季集完整性为核心,经过候选搜索、目录核验、同网盘转存、目标复核、分享发布和持续复检的一套异步资源供应链。
蝎子拉屎独一份,这可能是全网首发功能吧,唯一缺点是手动触发搜索转存的耗时比较长,一般需要一分钟左右。可以配合后台采集更新自动异步搜索转存,这样前端打开就可以做到秒开了。
后台欢迎页展示信息

搜索、转存、发布过程

已发布待复检的资源

最终展示效果
