弹幕清单
弹幕的第三方来源(VOD 除外)都由一份清单(manifest)描述:清单是一份声明式的 JSON,用一组请求步骤(pipeline)定义如何搜索番剧、获取剧集列表和获取弹幕,运行时由扩展内置的引擎解释执行,不需要为每个网站单独写代码。
目录从哪里来
Section titled “目录从哪里来”扩展内置一份可扩展的弹幕源目录,目录中的清单来自 dango 项目,扩展后端会在被请求时从这里拉取目录索引和清单文件并缓存(缓存约 15 分钟)。扩展每 12 小时自动检查一次,安装或更新扩展时也会检查,也可以在弹幕源目录页面手动点击刷新。
如果暂时连不上目录(比如离线),扩展会使用打包时内置的一份离线清单快照,保证没有网络的情况下扩展仍然可以使用已有的来源;一旦重新连上目录,这些离线来源会在下次同步时自动替换为目录里的最新版本。
已安装的来源如果后来在目录中发布了新版本,会出现在弹幕源页面的有可用更新中,需要手动点击更新或全部更新;还没有安装的来源有新版本时会在下次同步时静默替换,不需要手动操作。
添加自己的清单
Section titled “添加自己的清单”在弹幕源页面点击添加,选择新建配置,进入清单编辑器:
- 在配置 JSON里编写或粘贴清单,编辑器会实时按清单的 JSON Schema 校验,格式错误或不满足规范时会在下方列出具体的字段路径和错误信息
- 校验通过后,可以用下方的测试运行面板,用一个关键词搜索、选择一季、选择一集、拉取弹幕,在保存前确认清单能正常工作
- 点击保存
保存后清单会立刻出现在已安装列表中,同时创建一个使用默认配置值的实例,不需要额外的步骤。
目录里的来源可以点击查看源码只读查看,不能直接编辑;点击复制可以复制出一份可编辑的副本,另存为一个新的自定义来源。只有自己新建或复制出来的自定义来源可以编辑或删除。
清单的基本结构
Section titled “清单的基本结构”一份最简单的清单大致长这样:
{ "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 项目里已有的清单。