Skip to content

规则执行链

规则引擎围绕一个稳定的数据契约工作:

text
keyword
  └─ search[] ─→ List<Series>
                       │ seriesId

                  detail[] ─→ List<Source>
                                      │ episodeId

                                  play[] ─→ URL + media metadata

SourceRule

SourceRuleanx-rule/2 的内存模型,包含元数据、全局请求头、配方、三段管线和运行标志。JSON 在载入时被转为不可变的 PipelineStep 列表,first 分支也会预解析,避免每次执行重建步骤树。

PipelineInterpreter

解释器维护一个管线上下文:

  • value:当前步骤的输入/输出。
  • varskeywordseriesIdepisodeId 和自定义变量。
  • pageUrl:最近一次请求页面,供相对 URL 与 Referer 使用。
  • seriesOut / sourcesOut:搜索和详情阶段的结构化输出。
  • mediaHeaders / Cookie 选择器:播放阶段元数据。

普通步骤串行执行。first 会为每个分支建立隔离试运行上下文,只提交第一个真正产出结果的分支,失败分支不会泄漏变量或媒体头。

PipelineHost

解释器不直接创建 Dio 或 WebView。它依赖窄接口 PipelineHost

  • 发起带调度、优先级与取消令牌的 HTTP 请求。
  • 用 CSS 或 XPath 解析 HTML。
  • 归一化 URL 并判断是否是可播放媒体。
  • 渲染 WebView HTML 或嗅探视频请求。

这使解释器能够使用 FakeHost 做确定性的单元测试,真实客户端再由 PipelineSourceAdapter 提供网络实现。

PipelineSourceAdapter

适配器承担规则引擎与上层播放器之间的桥接:

  • 展开 maccms / player_aaaa 配方。
  • 合并全局请求头与步骤请求头。
  • 持久化同一规则会话的 Cookie。
  • 根据 directConnection 选择系统代理或直连。
  • 对媒体 URL 做缓存、校验和播放准备。
  • 处理媒体 Header、Cookie 过滤、HLS 物化及 keep-alive。

请求调度

所有规则 HTTP 请求经过 RequestScheduler。调度器支持全局并发、单域并发、优先级与取消,避免跨源搜索时无界并发拖慢 UI 或给目标站点制造不必要压力。

规则安装链

1编写明文
anx-rule/2
2静态校验
结构与参数
3真实验证
search → play
4登记索引
更新 rev
5客户端安装
缓存与更新

开发环境会向上查找本地 rule/index.json,发行环境默认读取远程订阅。索引和已安装版本分别缓存;更新时保留本地 source id、启用状态与创建时间,并刷新 updatedAt 以触发适配器缓存失效。

文档内容采用项目许可证约束;第三方站点与内容不由 AniBaka 提供。