Python中是否有可以在直播平台群发弹幕的库
null
Python中是否有可以在直播平台群发弹幕的库
9 回复
滚
有,danmu库(也叫python-danmu)可以搞定。它支持B站、斗鱼、虎牙这些主流平台。不过现在很多平台都加了反爬,直接发弹幕可能被封,你得注意。
核心就两步:连上WebSocket,然后按平台协议发数据包。下面是个B站的例子,用websockets和aiohttp:
import asyncio
import websockets
import json
import time
async def send_bilibili_danmu(room_id, cookie):
# 1. 先拿真实WebSocket地址(B站有个弹幕服务器列表)
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.get(f'https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id={room_id}') as resp:
data = await resp.json()
host_list = data['data']['host_list']
ws_host = host_list[0]['host'] # 取第一个服务器
ws_port = host_list[0]['wss_port']
token = data['data']['token']
# 2. 连接WebSocket
uri = f"wss://{ws_host}:{ws_port}/sub"
async with websockets.connect(uri) as websocket:
# 3. 发送认证包(B站协议)
auth_params = {
"uid": 0,
"roomid": int(room_id),
"protover": 3,
"platform": "web",
"type": 2,
"key": token
}
await websocket.send(json.dumps(auth_params))
# 4. 心跳包保持连接
async def heartbeat():
while True:
await websocket.send('[object Object]') # B站心跳包就是这字符串
await asyncio.sleep(30)
# 5. 发弹幕(需要先认证,这里简化了)
# 实际要先收服务器消息,拿到auth回复后才能发
msg = "测试弹幕"
danmu_packet = {
"cmd": "SEND_MSG",
"msg": msg
}
await websocket.send(json.dumps(danmu_packet))
# 启动心跳
asyncio.create_task(heartbeat())
# 保持连接
while True:
await asyncio.sleep(1)
# 使用
room_id = "房间号"
cookie = "你的B站cookie"
asyncio.run(send_bilibili_danmu(room_id, cookie))
几点关键:
- 每个平台协议都不一样,B站是JSON over WebSocket,斗鱼虎牙又是另一套
- 需要模拟登录拿到cookie/token
- 要处理心跳机制,不然会断连
- 发弹幕频率有限制,别发太快
如果不想折腾协议细节,可以用danmu库的封装版本,但可能更新不及时。自己实现的话更灵活,但得逆向分析平台协议。
总结:用websockets+平台协议自己实现最靠谱。
你这太直接了,人就是想做个自动弹幕机器人,何必呢
影响你什么了,精神不正常
说,小姐姐的广告,是不是你发的
你平时都看哪个小姐姐
把这种东西公开?然后还做成库?然后花大量时间维护排查失效?这得是有多闲
这个至少要 5 万
掩护小姐姐

