直播间弹幕

获取当前用户对应直播间可发弹幕配置

https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup

请求方式: GET

认证方式: Cookie (SESSDATA)

未登录也可以获取,但颜色只有白色可用,模式只有滚动。

url参数:

参数名类型内容必要性备注
room_idnum直播间id必要
web_locationstr(?)非必要作用尚不明确
w_ridstrwbi签名非必要不强制需要
wtsnum秒时间戳非必要不强制需要

json回复:

根对象:

字段类型内容备注
codenum返回值0: 成功
-400: 参数错误
dataobj信息本体
messagestr错误信息
msgstr信息成功时存在,为""(空字符串)
ttlnum1成功时不存在

data 对象:

字段类型内容备注
grouparr弹幕颜色组
modearr弹幕显示模式

data.group 数组中对象:

字段类型内容备注
namestr显示名称
sortnum用于排序
colorarr该组颜色列表

data.group[i].color 数组中对象:

字段类型内容备注
namestr颜色名
colorstr十进制颜色值发送弹幕用
color_hexstr十六进制颜色值发送弹幕用
statusnum可用状态0: 不可用
1: 可用
weightnum(?)作用尚不明确
color_idnum颜色id?
originnum(?)

data.mode 数组中对象:

字段类型内容备注
namestr模式名称
modenum模式值发送弹幕用
typestr模式类型
statusnum可用状态0: 不可用
1: 可用

示例:

获取未登录用户在直播间 1 的弹幕配置可用情况

curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup?room_id=1'
查看响应示例:
{
  "code": 0,
  "data": {
    "group": [
      {
        "name": "普",
        "sort": 0,
        "color": [
          {
            "name": "白色",
            "color": "16777215",
            "color_hex": "ffffff",
            "status": 1,
            "weight": -9999,
            "color_id": -9999,
            "origin": 0
          }
        ]
      },
      {
        "name": "航",
        "sort": 100,
        "color": [
          {
            "name": "紫色",
            "color": "14893055",
            "color_hex": "e33fff",
            "status": 0,
            "weight": 0,
            "color_id": 6,
            "origin": 1
          }
        ]
      },
      {
        "name": "粉",
        "sort": 200,
        "color": [
          {
            "name": "松石绿",
            "color": "5566168",
            "color_hex": "54eed8",
            "status": 0,
            "weight": 99,
            "color_id": 66,
            "origin": 2
          },
          {
            "name": "雨后蓝",
            "color": "5816798",
            "color_hex": "58c1de",
            "status": 0,
            "weight": 98,
            "color_id": 67,
            "origin": 2
          },
          {
            "name": "星空蓝",
            "color": "4546550",
            "color_hex": "455ff6",
            "status": 0,
            "weight": 97,
            "color_id": 68,
            "origin": 2
          },
          {
            "name": "紫罗兰",
            "color": "9920249",
            "color_hex": "975ef9",
            "status": 0,
            "weight": 96,
            "color_id": 69,
            "origin": 2
          },
          {
            "name": "梦境红",
            "color": "12802438",
            "color_hex": "c35986",
            "status": 0,
            "weight": 95,
            "color_id": 70,
            "origin": 2
          },
          {
            "name": "热力橙",
            "color": "16747553",
            "color_hex": "ff8c21",
            "status": 0,
            "weight": 94,
            "color_id": 71,
            "origin": 2
          },
          {
            "name": "香槟金",
            "color": "16774434",
            "color_hex": "fff522",
            "status": 0,
            "weight": 93,
            "color_id": 72,
            "origin": 2
          }
        ]
      },
      {
        "name": "爷",
        "sort": 300,
        "color": [
          {
            "name": "红色",
            "color": "16738408",
            "color_hex": "ff6868",
            "status": 0,
            "weight": 0,
            "color_id": 8,
            "origin": 3
          },
          {
            "name": "蓝色",
            "color": "6737151",
            "color_hex": "66ccff",
            "status": 0,
            "weight": 0,
            "color_id": 7,
            "origin": 3
          }
        ]
      },
      {
        "name": "活",
        "sort": 400,
        "color": [
          {
            "name": "盛典金",
            "color": "16766720",
            "color_hex": "ffd700",
            "status": 0,
            "weight": 100,
            "color_id": 44,
            "origin": 4
          },
          {
            "name": "升腾蓝",
            "color": "4286945",
            "color_hex": "4169e1",
            "status": 0,
            "weight": 100,
            "color_id": 43,
            "origin": 4
          },
          {
            "name": "青色",
            "color": "65532",
            "color_hex": "fffc",
            "status": 0,
            "weight": 0,
            "color_id": 5,
            "origin": 4
          },
          {
            "name": "绿色",
            "color": "8322816",
            "color_hex": "7eff00",
            "status": 0,
            "weight": 0,
            "color_id": 4,
            "origin": 4
          },
          {
            "name": "黄色弹幕",
            "color": "16772431",
            "color_hex": "ffed4f",
            "status": 0,
            "weight": 0,
            "color_id": 3,
            "origin": 4
          },
          {
            "name": "橙色",
            "color": "16750592",
            "color_hex": "ff9800",
            "status": 0,
            "weight": 0,
            "color_id": 2,
            "origin": 4
          },
          {
            "name": "粉色",
            "color": "16741274",
            "color_hex": "ff739a",
            "status": 0,
            "weight": 0,
            "color_id": 1,
            "origin": 4
          }
        ]
      }
    ],
    "mode": [
      {
        "name": "滚动",
        "mode": 1,
        "type": "scroll",
        "status": 1
      },
      {
        "name": "底部",
        "mode": 4,
        "type": "bottom",
        "status": 0
      },
      {
        "name": "顶部",
        "mode": 5,
        "type": "top",
        "status": 0
      }
    ]
  },
  "message": "",
  "msg": ""
}

设置弹幕样式

https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig

请求方式: POST

认证方式: Cookie (SESSDATA)

鉴权方式: Cookie中bili_jct的值正确并与csrf相同

正文参数 (application/x-www-form-urlencoded):

参数名类型内容必要性备注
csrfstrCSRF Token(位于cookie)必要
csrf_tokenstr同csrf非必要
room_idnum直播间id必要
colorstr颜色值必要(可选)color和mode任选一个
modenum弹幕模式必要(可选)color和mode任选一个

注1: 抓取到的color格式是"0x"+六位十六进制小写颜色值,实际不需要0x,且不区分大小写。

注2: 若color和mode同时存在将只处理color,mode将被忽略。(见#1236(comment)open in new window

json回复:

根对象:

字段类型内容备注
codenum返回值0: 成功
-101: 账号未登录
-500: 未达到使用条件
10064002: 参数错误
10065107: 颜色不存在
messagestr错误信息
ttlnum1
dataobj信息本体部分情况不存在,10064002时为null

data 对象:

字段类型内容备注
statusnum同code
msgstr提示信息成功时有内容
roomidnum直播间id

示例:

更改直播间 1017 的弹幕颜色为白色

curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig' \
  --data-urlencode 'room_id=1017' \
  --data-urlencode 'color=0xffffff' \
  --data-urlencode 'csrf=xxx' \
  -b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
  "code":0,
  "message":"0",
  "ttl":1,
  "data":{
    "status":0,
    "msg":"设置成功~",
    "roomid":1017
  }
}

发送直播弹幕

https://api.live.bilibili.com/msg/send

请求方式: POST

认证方式: Cookie (SESSDATA)

鉴权方式: Cookie中bili_jct的值正确并与csrf相同

url参数:

参数名类型内容必要性备注
w_ridstrwbi签名非必要不强制需要
wtsnumUnix 秒时间戳非必要不强制需要

正文参数 (application/x-www-form-urlencodedmultipart/form-data):

参数名类型内容必要性备注
csrfstrCSRF Token(位于cookie)必要
roomidnum直播间id必要
msgstr弹幕内容必要
rndnum当前 Unix 秒时间戳必要
fontsizenum字体大小必要默认为25
colornum十进制颜色值必要实际无效果
modenum展示模式非必要默认为1
bubblenum(?)非必要值为0
room_typenum(?)非必要0
jumpfromnum(?)非必要0
reply_midnum(?)非必要0
reply_attrnum(?)非必要0
reply_unamestr(?)非必要""
replay_dmidstr(?)非必要""
statisticsstr(?)非必要{"appId":100,"platform":5}
csrf_tokenstr同csrf非必要

json回复:

根对象:

字段类型内容备注
codenum返回值-101:账号未登录
-111:csrf 校验失败
-400:请求错误,带有必须参数的信息
1003212:超出限制长度
10031:发送频率过快
messagestr错误信息
msgstrmessage
dataobj信息本体
ttlnum1在小于0的code中存在

data 对象:

字段类型内容备注
mode_infoobj弹幕信息
dm_v2nullv2弹幕

data.mode_info 对象:

基本上与直播间信息流#弹幕 (DANMU_MSG)info[0][15]对象相同。

示例:

给直播间 1899237171 发送内容为 QwQ 的弹幕

curl 'https://api.live.bilibili.com/msg/send' \
  --data-urlencode 'roomid=1899237171' \
  --data-urlencode 'msg=QwQ' \
  --data-urlencode 'rnd=1744956003' \
  --data-urlencode 'fontsize=25'
  --data-urlencode 'color=16777215'
  --data-urlencode 'csrf=xxx' \
  -b 'SESSDATA=xxx;bili_jct=xxx'
查看响应示例:
{
  "code":0,
  "data":{
    "mode_info":{
      "mode":0,
      "show_player_type":0,
      "extra":"{\"send_from_me\":true,\"master_player_hidden\":false,\"mode\":0,\"color\":16777215,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"QwQ\",\"user_hash\":\"2402762465\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":7,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":null,\"is_audited\":false,\"id_str\":\"4e3ed8ede9409b234b5e1d64c06801ea3119\",\"icon\":null,\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"reply_type_enum\":0,\"hit_combo\":0,\"esports_jump_url\":\"\"}",
      "user":{
        "uid":438160221,
        "base":{
          "name":"weatfe",
          "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg",
          "name_color":0,
          "is_mystery":false,
          "risk_ctrl_info":null,
          "origin_info":{
            "name":"weatfe",
            "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg"
          },
          "official_info":{
            "role":0,
            "title":"",
            "desc":"",
            "type":-1
          },
          "name_color_str":""
        },
        "medal":null,
        "wealth":null,
        "title":{
          "old_title_css_id":"",
          "title_css_id":""
        },
        "guard":null,
        "uhead_frame":null,
        "guard_leader":{
          "is_guard_leader":false
        }
      }
    },
    "dm_v2":null
  },
  "message":"",
  "msg":""
}