Skip to content

适配配置

This content is not available in your language yet.

基于规则的,可自定义的适配方案,用于在网页上采集番剧信息从而实现弹幕的自动匹配。

基本概念

番剧信息

弹幕的自动匹配需要4个基本信息

适配配置允许用户为单独为每个信息提供XPathregex

番剧标题

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

集数

当前播放的是第几集。非分集视频(如电影)可忽略。默认为1。

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

当前播放的是第几季。存在时,作为关键词的一部分用于搜索番剧信息。搜索时会将季信息与番剧标题拼接。

季不一定是数字,任何可以用于消歧义的信息都可以。比如进击的巨人 最终季 完结篇中,季为最终季 完结篇

很多时候,季信息是标题的一部分(如上面这样的),这种情况下应该将季信息作为标题的一部分提供。

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

单集标题

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


以这个标题为例:

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

四个信息分别为:

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

也可以将第二季理解为标题的一部分:

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

这两种情况都是可以的,选择编写简单的规则即可。

规则

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

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

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

一个适配配置可以包含至多4个规则,分别对应上述4个番剧信息。每个规则可以包含多条XPathregex。 其中,标题是必须的,其他信息可以省略。集数必须是数字,季和单集标题可以是任意字符串。暂不支持非数字的集数,如“第一集”。

注意事项

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

编写规则

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

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

单个节点

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

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

举个简单的例子

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

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

对应HTML

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

这个标题包含了番剧标题、集数和单集标题。

从这个标题中提取信息可以使用以下XPath

//*[@id="anime-title-1"]

和以下regex

(?<title>.+) 第(?<episode>\d+)集 (?<episodeTitle>.*)

再举一个稍复杂的例子:

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

对应HTML

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

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

另外可以发现div中有一个data-title属性,这个属性包含了所有信息,也可以选择这个属性。

//div/@data-title

基于这个原则,理论上所有的网页都可以理解为一个节点,只需要选择最小的包含所有信息的节点,然后使用regex提取信息即可。 当然这样可能会导致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