自动匹配
自动匹配通过采集网页中的剧集信息识别正在播放的视频,从而实现弹幕的自动匹配。理想情况下,自动匹配可以完全自动化弹幕的匹配过程,从而免去手动搜索的麻烦。
自动匹配分为两种:
关联适配规则
Section titled “关联适配规则”自动匹配可以与一个或多个装填配置关联,当装填配置启用时,扩展会自动使用关联的自动匹配。
- 在启用了装填配置的网页中,打开悬浮面板
- 点击适配配置
- 打开下拉菜单,选择一个规则。
- 如果没有合适的自动匹配,可以点击添加自动匹配添加一个新的。
开启AI匹配后,扩展会从网页中截取可能包含番剧信息的文本,然后用LLM(Gemini)从中提取剧集信息。
效果只能说马马虎虎,而且受网页结构影响较大,有的网页比较刁钻,可能识别不了一点。
优点是方便,不需要任何配置。
开启AI自动适配
Section titled “开启AI自动适配”在适配规则中勾选使用AI并保存。
- 匹配结果存在缓存,同一个网页一定时间内重新匹配会获得相同的结果。
- AI服务存在限流,失败时,请过一分钟再试。
- Gemini有地域限制,使用VPN或代理可能反而会无法使用。
- 如果装填配置过于宽松,比如
*://*/*
,会禁用AI匹配。- 具体来说如果装填配置会导致扩展在B站,抖音等视频网站生效,会判定为过于宽松。
XPath规则
Section titled “XPath规则”基于XPath
和regex
的规则,用于在网页上采集剧集信息从而实现弹幕的自动匹配。
基本上,自动匹配只需要剧集的标题以及集数。
然而由于各个网站的结构不同,标题可能被拆分为多个部分,比如“第一季”有时会被单独拆分出来。
规则允许用户为单独为每项信息提供XPath
和regex
。
必须
当前播放的番剧的名称。作为关键词用于搜索番剧信息。
必须
当前播放的是第几集。非分集视频(如电影)可忽略。默认使用1。分集视频则必须提供,否则无法正确匹配弹幕。
必须为阿拉伯数字,暂不支持非数字的集数,如“第一集”。
用于从检索到的番剧信息中选择对应的集数。
可选
当前播放的是第几季。搜索时会与标题合并作为搜索关键词。
大多数网站会把季信息包含在标题中,这种情况下可以忽略此项。
然而也有网站会将季信息提取出来独立在标题外,这时就需要单独提供季的XPath
和regex
。
例(加粗为季):
- 进击的巨人 第二季
- 摇曳露营 第三季
可选
当前播放的单集的标题。非分集视频默认为番剧标题。辅助匹配。
以这个标题为例:
【我推的孩子】 第二季 第01集 情感演技
四项信息分别为:
- 番剧标题:【我推的孩子】
- 季:第二季
- 集数:01(转换为数字时为 1)
- 单集标题:情感演技
或者
- 番剧标题:【我推的孩子】 第二季
- 季:(空)
- 集数:01
- 单集标题:情感演技
这两种是等价的,根据网页结构选择编写简单的即可。
为了提取这些信息,需要根据网页的结构编写规则
规则是XPath
和正则表达式regex
的组合,XPath
用于选择信息所在的节点,regex
用于从节点的文本中提取信息。
扩展会监视选择到的节点,当节点的文本发生变化时,扩展会重新提取信息,以此判断是否需要更新弹幕。
一个适配规则可以包含至多 4 个规则,分别对应上述 4 个番剧信息。每个规则可以包含多条XPath
和regex
。
注意事项
- 适配规则需要和装填配置关联(装填配置中选择)
- 适配规则只在存在视频时生效
regex
固定忽略大小写XPath
和regex
存在多个时,取第一个成功匹配的- 如果
XPath
选择到多个节点,取第一个 XPath
需要选择一个节点,不支持如concat(//*[@id="title"],"")
这样的输出字符串的XPath
XPath
可以从浏览器的开发者工具中复制。复制得到的XPath
不一定能够覆盖所有情况,可能需要手动调整。
由于网页的结构各不相同,适配规则需要根据网页的结构编写。
这里考虑两种情况:信息全部在一个节点中和信息分散在多个节点中。
默认,也是最普遍的情况。所有信息都存在于一个节点中,这个节点通常是标题。
在表单中表现为勾选 仅使用标题匹配 选项。
举个简单的例子
Section titled “举个简单的例子”假设网页上有这样一个标题:
败犬女主太多了! 第03集 在战斗开始前就输了
对应HTML
<div id="anime-title" class="title"> <p>败犬女主太多了! 第03集 在战斗开始前就输了</p></div>
这个标题包含了番剧标题、集数和单集标题。
从这个标题中提取信息可以使用以下XPath
:
//*[@id="anime-title"]
和以下regex
:
(?<title>.+) 第(?<episode>\d+)集 (?<episodeTitle>.*)
提取的信息为:
{ "title": "败犬女主太多了!", "episode": "03", "episodeTitle": "在战斗开始前就输了"}
再举一个稍复杂一些的例子:
Section titled “再举一个稍复杂一些的例子:”败犬女主太多了!第03集在战斗开始前就输了
对应HTML
<div id="anime-title-2" class="anime-title"> <p> <span>败犬女主太多了!</span> <span>第03集</span> <span>在战斗开始前就输了</span> </p></div>
可以发现,虽然信息分散在多个span
中,但是这些span
都在同一个p
和div
中,选择div
即可从文本中提取所有信息。
和上面的例子的区别在于这里的空格并非空格符,而是CSS
样式,需调整regex
。
即信息分散在多个节点中,这种情况下可以单独提供每个信息的XPath
和regex
。
在表单中表现为取消勾选 仅使用标题匹配 选项。
接着用上面的例子
<div id="anime-title-2" class="anime-title" data-title="败犬女主太多了! 第03集 在战斗开始前就输了"> <p> <span>败犬女主太多了!</span> <span>第03集</span> <span>在战斗开始前就输了</span> </p></div>
可以提供以下XPath
和regex
:
标题
//*[@id="anime-title-2"]/p/span[1]
.*
集数
//*[@id="anime-title-2"]/p/span[2]
第(\d+)集
单集标题
//*[@id="anime-title-2"]/p/span[3]
.*
此例子中默认季存在于标题中,所以不需要提供季的XPath
和regex
。