跳转到内容

自动匹配

自动匹配通过采集网页中的剧集信息识别正在播放的视频,从而实现弹幕的自动匹配。理想情况下,自动匹配可以完全自动化弹幕的匹配过程,从而免去手动搜索的麻烦。

自动匹配分为两种:

自动匹配可以与一个或多个装填配置关联,当装填配置启用时,扩展会自动使用关联的自动匹配。

  1. 在启用了装填配置的网页中,打开悬浮面板
  2. 点击适配配置
  3. 打开下拉菜单,选择一个规则。
  4. 如果没有合适的自动匹配,可以点击添加自动匹配添加一个新的。

开启AI匹配后,扩展会从网页中截取可能包含番剧信息的文本,然后用LLM(Gemini)从中提取剧集信息。

效果只能说马马虎虎,而且受网页结构影响较大,有的网页比较刁钻,可能识别不了一点。

优点是方便,不需要任何配置。

在适配规则中勾选使用AI并保存。

  • 匹配结果存在缓存,同一个网页一定时间内重新匹配会获得相同的结果。
  • AI服务存在限流,失败时,请过一分钟再试。
  • Gemini有地域限制,使用VPN或代理可能反而会无法使用。
  • 如果装填配置过于宽松,比如*://*/*,会禁用AI匹配。
    • 具体来说如果装填配置会导致扩展在B站,抖音等视频网站生效,会判定为过于宽松。

基于XPathregex的规则,用于在网页上采集剧集信息从而实现弹幕的自动匹配。

基本上,自动匹配只需要剧集的标题以及集数

然而由于各个网站的结构不同,标题可能被拆分为多个部分,比如“第一季”有时会被单独拆分出来。

规则允许用户为单独为每项信息提供XPathregex

必须

当前播放的番剧的名称。作为关键词用于搜索番剧信息。

必须

当前播放的是第几集。非分集视频(如电影)可忽略。默认使用1。分集视频则必须提供,否则无法正确匹配弹幕。

必须为阿拉伯数字,暂不支持非数字的集数,如“第一集”。

用于从检索到的番剧信息中选择对应的集数。

可选

当前播放的是第几季。搜索时会与标题合并作为搜索关键词。

大多数网站会把季信息包含在标题中,这种情况下可以忽略此项。

然而也有网站会将季信息提取出来独立在标题外,这时就需要单独提供季的XPathregex

例(加粗为季):

  • 进击的巨人 第二季
  • 摇曳露营 第三季

可选

当前播放的单集的标题。非分集视频默认为番剧标题。辅助匹配。


以这个标题为例:

【我推的孩子】 第二季 第01集 情感演技

四项信息分别为:

  • 番剧标题:【我推的孩子】
  • 季:第二季
  • 集数:01(转换为数字时为 1)
  • 单集标题:情感演技

或者

  • 番剧标题:【我推的孩子】 第二季
  • 季:(空)
  • 集数:01
  • 单集标题:情感演技

这两种是等价的,根据网页结构选择编写简单的即可。

为了提取这些信息,需要根据网页的结构编写规则

规则是XPath和正则表达式regex的组合,XPath用于选择信息所在的节点regex用于从节点的文本中提取信息。

扩展会监视选择到的节点,当节点的文本发生变化时,扩展会重新提取信息,以此判断是否需要更新弹幕。

一个适配规则可以包含至多 4 个规则,分别对应上述 4 个番剧信息。每个规则可以包含多条XPathregex

注意事项

  • 适配规则需要和装填配置关联(装填配置中选择)
  • 适配规则只在存在视频时生效
  • regex固定忽略大小写
  • XPathregex存在多个时,取第一个成功匹配的
  • 如果XPath选择到多个节点,取第一个
  • XPath需要选择一个节点,不支持如concat(//*[@id="title"],"")这样的输出字符串的XPath
  • XPath可以从浏览器的开发者工具中复制。复制得到的XPath不一定能够覆盖所有情况,可能需要手动调整。

由于网页的结构各不相同,适配规则需要根据网页的结构编写。

这里考虑两种情况:信息全部在一个节点中和信息分散在多个节点中。

默认,也是最普遍的情况。所有信息都存在于一个节点中,这个节点通常是标题。

在表单中表现为勾选 仅使用标题匹配 选项。

假设网页上有这样一个标题:

败犬女主太多了! 第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": "在战斗开始前就输了"
}

败犬女主太多了!第03集在战斗开始前就输了

对应HTML

<div
id="anime-title-2"
class="anime-title"
>
<p>
<span>败犬女主太多了!</span>
<span>第03集</span>
<span>在战斗开始前就输了</span>
</p>
</div>

可以发现,虽然信息分散在多个span中,但是这些span都在同一个pdiv中,选择div即可从文本中提取所有信息。 和上面的例子的区别在于这里的空格并非空格符,而是CSS样式,需调整regex

即信息分散在多个节点中,这种情况下可以单独提供每个信息的XPathregex

在表单中表现为取消勾选 仅使用标题匹配 选项。

接着用上面的例子

<div
id="anime-title-2"
class="anime-title"
data-title="败犬女主太多了! 第03集 在战斗开始前就输了"
>
<p>
<span>败犬女主太多了!</span>
<span>第03集</span>
<span>在战斗开始前就输了</span>
</p>
</div>

可以提供以下XPathregex

标题

//*[@id="anime-title-2"]/p/span[1]
.*

集数

//*[@id="anime-title-2"]/p/span[2]
第(\d+)集

单集标题

//*[@id="anime-title-2"]/p/span[3]
.*

此例子中默认存在于标题中,所以不需要提供季的XPathregex