贡献一条规则
目标是一条可审查、可安装、可搜索、可列出剧集,并能返回真实可读媒体的规则。只通过 JSON 语法检查还不够。
1编写明文
→anx-rule/22静态校验
结构与参数
→结构与参数
3真实验证
search → play
→search → play
4登记索引
更新 rev
→更新 rev
5客户端安装
缓存与更新
缓存与更新
1. 确认站点契约
在写 JSON 前先记录:
- 搜索入口、方法、参数和响应类型。
- 搜索结果中的稳定 id、标题、封面和详情链接。
- 详情页线路与剧集的结构。
- 播放器页面、API 或 iframe 的跳转链。
- 媒体是否需要 Referer、User-Agent、Cookie 或定时授权。
- 是否依赖 JavaScript challenge / WebView。
- token 请求与媒体请求是否必须走同一网络出口。
优先选择公开 JSON API,其次是稳定的 HTML 结构,最后才是 WebView 嗅探。
2. 创建规则文件
在 rule/ 下创建与稳定 id 同名的 UTF-8 JSON:
text
rule/example.json先写最小元数据与三段管线。id、文件名与索引 key 应一致。
json
{
"format": "anx-rule/2",
"id": "example",
"name": "Example",
"baseUrl": "https://example.com",
"iconUrl": "https://example.com/favicon.ico",
"search": [],
"detail": [],
"play": []
}3. 分阶段实现
不要一次写完再猜问题位置。
- 先让
search返回正确的Series。 - 再让
detail对一个已知条目返回非空线路和剧集。 - 最后实现
play,并验证媒体请求。
对常见 MacCMS 可以从配方开始:
json
{
"recipes": ["maccms"]
}只有默认阶段不适用时才显式覆盖对应管线。
4. 添加到订阅索引
在 rule/index.json 增加条目:
json
{
"key": "example",
"title": "Example",
"by": "your-name",
"rev": 1,
"intro": "一句话说明规则用途。",
"site": "https://example.com/",
"badge": "https://example.com/favicon.ico",
"labels": ["anime", "高清"],
"ref": "example.json",
"engine": "anx-rule/2"
}修改已有规则时递增 rev。badge 应与规则 iconUrl 保持一致。
5. 静态测试
至少执行规则相关测试:
bash
flutter test test/source/pipeline_engine_test.dart
flutter test test/source/bundled_rules_test.dart
flutter test test/source/source_codec_test.dart如果新增了通用操作符或改变解释器语义,为该行为添加使用 FakeHost 的确定性测试。
6. 添加 live probe
在 test/source/live_new_rules_test.dart 增加规则案例:
dart
test(
'example',
() => _probe(
'example.json',
'可稳定命中的番剧关键词',
verifyMedia: true,
),
timeout: const Timeout(Duration(minutes: 2)),
);运行单条测试:
bash
flutter test test/source/live_new_rules_test.dart \
--dart-define=LIVE=true \
--plain-name exampleverifyMedia: true 会继续检查 HLS 清单与媒体分片。对 WebView-only 规则,测试环境无法嗅探时可以使用 strictPlay: false,但必须在真实 App 中补做播放验证并在 PR 中说明。
7. 提交前清单
- [ ] 文件为 UTF-8、JSON 可解析、
format为anx-rule/2。 - [ ]
id、文件名、索引key一致。 - [ ]
iconUrl与索引badge一致且为 HTTP(S) URL。 - [ ]
search → detail → play真实链路通过。 - [ ] 播放验证检查了媒体内容,而非只看 URL 非空。
- [ ] 必要的 Header、Cookie 与 Referer 已显式传递。
- [ ] 没有个人 Cookie、Token、账户信息或抓包隐私数据。
- [ ] 修改旧规则时已递增
rev。 - [ ] 没有无关格式化或生成文件改动。
何时扩展引擎
只有满足以下条件才考虑新增操作符:
- 现有操作符无法可靠表达。
- 能明确描述输入、输出与失败语义。
- 至少两个规则可复用,或协议本身足够稳定。
- 能提供无网络的单元测试和真实站点验证。
新增操作符需同步修改解释器、静态校验器、测试和本页参考文档。
