用途
MoonTV OpenClaw Skill 是 Hermes Skills 集合中的一个技能,用于让 AI 智能体协助开发者使用 MoonTV OpenClaw。MoonTV OpenClaw 是一个基于 Python 的影视聚合工具,负责抓取多个 CMS 源、对内容进行排序、生成 LLM 亮点,并产出带追剧跟踪的每日 Markdown 报告。
主要能力
- 多源聚合:通过网关 API 并发抓取 400+ CMS 源。
- 智能去重:按 vod_name 去重,保留首次出现的条目。
- 五类排名:电影、剧集、综艺、短剧、福利,每类取 Top 5。
- 双路径评分:有豆瓣评分时使用豆瓣评分,否则回退到基于热度的评分。
- 追剧清单跟踪:监控已配置的剧集更新。
- LLM 亮点:通过 GPT-4o-mini 生成内容亮点(回退方案为简介截断)。
- 自动清理:删除超过 7 天的报告。
安装与配置
前置条件:Python 3.11+,以及可访问 CMS 源的网络。
克隆与初始化:
git clone https://github.com/doane2002cn/moontv-openclaw-skill.git cd moontv-openclaw-skill
Copy environment template
cp .env.example .env
配置环境变量(编辑 .env):
Required: MoonTV gateway and play URL
MOONTV_GATEWAY=https://moontv-api.12879737.xyz MOONTV_PLAY_URL=https://moontv.dduan2002cn.xyz/play
Optional: Watchlist configuration
WATCHLIST_FILE=config/watchlist.json
Optional: LLM for highlights (auto-fallback if not set)
LLM_GATEWAY=https://api.gptgod.online/v1 LLM_MODEL=gpt-4o-mini LLM_API_KEY=your-api-key-from-env
注意:不要硬编码 API 密钥,应使用环境变量或密钥管理器。
项目结构
moontv-openclaw/ ├── scripts/ │ ├── moontv_daily.py # Main scraper & orchestrator │ ├── report_template.py # Markdown report renderer │ ├── highlight_generator.py # LLM highlight generator │ └── test_moontv.py # Test suite ├── config/ │ └── watchlist.json # Watchlist configuration ├── output/ # Generated reports (auto-created) └── .env # Environment variables
使用方式
生成每日报告:
cd scripts python moontv_daily.py
该命令会依次执行:从网关获取可用 CMS 源;并发抓取所有源(每个源 10 秒超时);按 vod_name 去重;分类为 5 个类别;评分并排名;匹配追剧清单条目(若已配置);生成 LLM 亮点(或回退);将 Markdown 报告渲染到 output/;清理超过 7 天的旧报告。
运行测试:
cd scripts python -m pytest test_moontv.py -v
关键模块
主要抓取器(moontv_daily.py)包含:fetch_gateway() 从网关获取 CMS 源;fetch_cms_data() 抓取单个 CMS 源当日数据;deduplicate() 按 vod_name 去重;classify() 按优先级分类(电影 > 剧集 > 综艺 > 短剧 > 福利);calculate_score() 双路径加权评分(豆瓣评分路径:豆瓣0.6 + 归一化热度0.3 + 时间加成0.1;无豆瓣路径:归一化热度0.6 + 时间加成0.3 + 基线0.1,基线为 5.0,12 小时内发布有 10 分时间加成)。
报告渲染器(report_template.py)包含 format_item() 格式化单条影视条目为 Markdown,以及 render_report() 渲染完整报告(含分类 Top 5 与追剧更新区块)。
亮点生成器(highlight_generator.py)包含 build_prompt() 构建批量 LLM 提示(要求 15 字以内亮点,JSON 数组返回),generate_highlights() 调用 LLM 并在失败时回退,fallback_highlights() 将简介去除标点后截取前 30 字作为亮点。
追剧清单配置
创建 config/watchlist.json:
{ "watchlist": [ {"name": "大唐迷雾", "type": "剧集"}, {"name": "认识的哥哥", "type": "综艺"}, {"name": "梦魇绝镇", "type": "剧集"} ] }
代码中通过 match_watchlist() 按 vod_name 精确匹配清单条目。
常见模式
- 并发抓取:使用 ThreadPoolExecutor(max_workers=10)并发抓取所有 CMS 源。
- 过滤低质量内容:移除无名称、且无评分与热度的条目。
- 提取集数:从 vod_remarks 中匹配“更新至N集”“第N集”“EPN”“N集全”等模式。
- 清理旧报告:删除 output 目录下超过 N 天(默认 7 天)的 moontv_*.md 文件。
故障排查
- 网关不可访问:检查 .env 中的 MOONTV_GATEWAY,可用 curl 验证网络。
- 无数据返回:网关可能被限流或宕机,等待后重试或检查网关状态。
- LLM 亮点未生成:检查 LLM_API_KEY、LLM_GATEWAY 与 API 配额;LLM 不可用时回退为截断简介属预期行为。
- 导入错误:安装依赖 pip install requests openai python-dotenv。
- 追剧清单未匹配:确认 WATCHLIST_FILE 路径正确,清单名称与 CMS 的 vod_name 完全一致,且条目确实出现在抓取数据中。
- 分类为空:某些类别无数据属正常,检查 classify() 逻辑与 CMS 的 type_name 值是否匹配。
测试覆盖
测试套件覆盖:去重逻辑、分类优先级、评分算法(含/不含豆瓣)、报告格式化、LLM 提示构建、回退亮点。
性能建议
- 并发抓取:根据网络调整 ThreadPoolExecutor 的 max_workers。
- 超时调优:默认每源 10 秒,慢网络可增加。
- LLM 批处理:所有亮点在单次 LLM 调用中生成以节省 token。
- 缓存:可考虑将网关源缓存 1 小时以减少 API 调用。
高级用法
- 自定义评分权重:修改 calculate_score() 中的权重(如豆瓣0.7 + 热度0.2 + 时间*0.1)。
- 新增分类:扩展 classify() 的 categories 字典与分类逻辑(如新增“动漫”)。
- 自定义报告格式:修改 report_template.py 的 render_report(),为各分类添加 emoji 图标。
适用场景与限制
适用场景:需要自动化聚合影视内容、生成每日推荐报告、跟踪追剧更新的开发者或团队。
限制:需要 Python 3.11+ 与可访问 CMS 源的网络;依赖外部网关与 LLM 服务的可用性;LLM 亮点在服务不可用时自动回退为简介截断;报告保留 7 天后自动清理。