B站直播弹幕关键词过滤接口详解:哔哩哔哩-API收集整理中的内容净化功能

在B站直播中,弹幕是观众互动的重要方式,但不良弹幕会影响观看体验。本文将详细介绍哔哩哔哩-API收集整理项目中与弹幕关键词过滤相关的接口功能,帮助开发者实现内容净化。

弹幕内容管理模块概述

哔哩哔哩-API收集整理项目的docs/danmaku/目录下包含了丰富的弹幕相关接口文档,其中与内容净化相关的主要有:

弹幕功能图标

热词解释接口:关键词识别基础

热词解释接口(buzzword)是实现关键词过滤的基础,它能帮助识别B站特有的网络流行语和潜在不良词汇。该接口位于docs/danmaku/buzzword.md,主要提供两个功能:

拉取名词解释列表

通过GET请求获取特定类型的热词列表:

https://api.bilibili.com/x/v2/dm/buzzword/list

主要参数:

  • type_id:名词类型(4代表"哔哩哔哩热词图鉴",5代表"语言类")
  • pn:页码(默认1)
  • ps:每页项数(默认20)

示例请求:

curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/list' \
--data-urlencode 'type_id=4' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'

响应中包含热词ID、名称和图片URL,如"麦乐鸡侠"、"金钱豹"等网络流行语。

查询名词解释详情

通过热词ID获取详细解释:

https://api.bilibili.com/x/v2/dm/buzzword/detail

主要参数:

  • id:名词ID(如1代表"kksk",2代表"打脸")

响应包含热词的详细解释、相关UP主和视频信息,有助于判断该词汇是否适合在特定场景中出现。

弹幕举报接口:主动内容过滤

当检测到不良弹幕时,可以通过举报接口进行处理。该接口定义在docs/danmaku/action.md中,路径为:

https://api.bilibili.com/x/dm/report/add

请求参数

参数名 类型 内容 必要性 备注
cid num 视频cid 必要
dmid num 弹幕dmid 必要
reason num 举报类型 必要 类型代码见下表
content str 其他举报备注 非必要 reason=11时有效
csrf str CSRF Token Cookie方式必要

举报类型代码

代码 含义
1 违法违禁
2 色情低俗
3 非法交易
4 人身攻击
5 侵犯隐私
6 垃圾广告
7 引战
8 剧透
9 恶意刷屏
10 视频无关
11 其他
12 青少年不良

示例请求

curl 'https://api.bilibili.com/x/dm/report/add' \
--data-urlencode 'cid=145928946' \
--data-urlencode 'dmid=35600074482384899' \
--data-urlencode 'reason=7' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'

智能防挡弹幕:提升观看体验

除了关键词过滤,B站还提供了智能防挡弹幕功能,通过蒙版技术让弹幕避开视频重要内容。相关文档位于docs/danmaku/webmask.md

webmask文件结构

webmask是一个二进制文件,包含视频不同时间段的蒙版信息。文件结构如下:

name offset length type desc
mask 0 4 char 'MASK' 文件头
version 4 4 int 版本号,目前为1
Ly 12 4 int 后续数据的段数
time_1 16 8 long 第一段对应视频开始时间
offset_1 24 8 long 第一段蒙版信息开始处对应二进制偏移

蒙版信息块经过gzip压缩,解压缩后包含SVG格式的蒙版数据,可以直接用于渲染。

Python解析示例

from struct import unpack
import gzip

f = open('你的 webmask', 'rb')
buf = f.read()
_Ly = buf[12:16]
Ly = unpack('>i', _Ly)[0]  # 大端序 int

times = []
offsets = []
for idx in range(Ly):
    op = 16 + idx * 16
    time = unpack('>q', buf[op: op+8])[0]
    offset = unpack('>q', buf[op+8: op+16])[0]
    times.append(time)
    offsets.append(offset)

frames = []
for idx in range(Ly):
    op = offsets[idx]
    if idx == Ly - 1: 
        ed = len(buf)
    else: 
        ed = offsets[idx+1]
    ba = buf[op: ed]
    bad = gzip.decompress(ba)
    badl = bad.split(b'data:image/svg+xml;base64,')
    frames.append(badl[1: ])

弹幕管理接口:批量操作

对于UP主或有管理权限的用户,可以通过弹幕管理接口批量删除或保护弹幕,接口定义在docs/danmaku/action.md

https://api.bilibili.com/x/v2/dm/edit/state

请求参数

参数名 类型 内容 必要性 备注
type num 弹幕类选择 必要 1:视频弹幕
oid num 视频cid 必要
dmids nums 弹幕dmid 必要 多个id之间用,分隔
state num 操作代码 必要 1:删除弹幕
2:弹幕保护
3:取消保护
csrf str CSRF Token Cookie方式必要

示例请求

curl 'https://api.bilibili.com/x/v2/dm/edit/state' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'dmids=35600074482384899,39067304918515717' \
--data-urlencode 'state=1' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'

总结与最佳实践

B站提供了一系列API来实现弹幕内容的净化,主要包括:

  1. 热词识别:通过buzzword接口识别潜在不良词汇
  2. 主动举报:使用report接口举报不良弹幕
  3. 批量管理:通过edit/state接口批量处理弹幕
  4. 智能防挡:利用webmask提升观看体验

建议开发者结合这些接口,实现多层次的内容净化策略:

  • 实时监控:利用热词接口识别可能的不良内容
  • 自动处理:对明确违规的内容自动提交举报
  • 人工审核:建立人工审核机制处理模糊情况
  • 用户反馈:允许用户标记不良内容,不断优化过滤算法

通过合理组合使用这些接口,可以有效提升直播弹幕的质量,创造更好的观看体验。完整的API文档请参考项目中的docs/danmaku/目录。

Logo

网易易盾是国内领先的数字内容风控服务商,依托网易二十余年的先进技术和一线实践经验沉淀,为客户提供专业可靠的安全服务,涵盖内容安全、业务安全、应用安全、安全专家服务四大领域,全方位保障客户业务合规、稳健和安全运营。

更多推荐