SuperAPI AI 工具集

moontv-openclaw-skill

通用与其它

查看项目

更新于 10-16 02:01

技能介绍

用途

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 天后自动清理。