跳转到内容

弹幕清单

弹幕的第三方来源(VOD 除外)都由一份清单(manifest)描述:清单是一份声明式的 JSON,用一组请求步骤(pipeline)定义如何搜索番剧、获取剧集列表和获取弹幕,运行时由扩展内置的引擎解释执行,不需要为每个网站单独写代码。

扩展内置一份可扩展的弹幕源目录,目录中的清单来自 dango 项目,扩展后端会在被请求时从这里拉取目录索引和清单文件并缓存(缓存约 15 分钟)。扩展每 12 小时自动检查一次,安装或更新扩展时也会检查,也可以在弹幕源目录页面手动点击刷新。

如果暂时连不上目录(比如离线),扩展会使用打包时内置的一份离线清单快照,保证没有网络的情况下扩展仍然可以使用已有的来源;一旦重新连上目录,这些离线来源会在下次同步时自动替换为目录里的最新版本。

已安装的来源如果后来在目录中发布了新版本,会出现在弹幕源页面的有可用更新中,需要手动点击更新或全部更新;还没有安装的来源有新版本时会在下次同步时静默替换,不需要手动操作。

在弹幕源页面点击添加,选择新建配置,进入清单编辑器:

  1. 在配置 JSON里编写或粘贴清单,编辑器会实时按清单的 JSON Schema 校验,格式错误或不满足规范时会在下方列出具体的字段路径和错误信息
  2. 校验通过后,可以用下方的测试运行面板,用一个关键词搜索、选择一季、选择一集、拉取弹幕,在保存前确认清单能正常工作
  3. 点击保存

保存后清单会立刻出现在已安装列表中,同时创建一个使用默认配置值的实例,不需要额外的步骤。

目录里的来源可以点击查看源码只读查看,不能直接编辑;点击复制可以复制出一份可编辑的副本,另存为一个新的自定义来源。只有自己新建或复制出来的自定义来源可以编辑或删除。

一份最简单的清单大致长这样:

{
"apiVersion": 1,
"id": "user:new-source",
"name": "New Source",
"version": "1.0.0",
"hosts": ["example.com"],
"identityFields": []
}
  • id:清单的唯一标识,只能以小写字母开头,后面可以跟字母、数字和 _:.-
  • name、version:显示名称和版本号
  • hosts:允许请求的域名,可以是具体域名、*.example.com 通配符,或 *(任意域名,用于像弹弹play这样地址由用户自己填写的来源);不能是本机或内网地址
  • identityFields:目前的清单格式仍要求这个字段,填 [] 即可。扩展不会读取它:番剧归属于获取它的那个来源实例,与实例的配置内容无关

在这个基础上,还可以声明:

  • search、episodes、danmaku:分别定义搜索、获取剧集列表和获取弹幕的请求步骤
  • season:重新获取已保存番剧的最新信息
  • parseUrl:把一个网址解析成番剧和剧集信息,用于地址解析
  • configSchema:定义这个来源需要用户填写的配置项(遵循 JSON Schema),扩展会据此自动生成设置表单
  • loginProbe:探测当前是否已登录
  • cookieSet:声明登录入口地址,配合 loginProbe 使用,扩展弹窗据此在存在问题里提示登录
  • locales:为以上字段提供其他语言的翻译

清单的完整字段和请求步骤写法可以参考 dango 项目里已有的清单。