避免bilibili弹幕风控 (#767)

This commit is contained in:
⁢4.435km/s authored and GitHub committed 2024-01-17 12:50:50 +00:00
1 parent 02a7f93347
commit c220773828
1 file changed
+27 -28
+27 -28
View File
@@ -1,12 +1,14 @@
import json
import logging
from struct import pack, unpack
import aiohttp
import zlib
from biliup.plugins import random_user_agent
from struct import pack, unpack
import aiohttp
import brotli
from biliup.plugins import match1
from biliup.plugins import random_user_agent
logger = logging.getLogger('biliup')
@@ -15,45 +17,42 @@ class Bilibili:
b'\x4f\x62\x6a\x65\x63\x74\x5d '
heartbeatInterval = 30
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'user-agent': random_user_agent(),
'Referer': 'https://live.bilibili.com/',
'origin': 'https://live.bilibili.com',
'referer': 'https://live.bilibili.com',
}
@staticmethod
async def get_ws_info(url):
danmu_wss_url = 'wss://broadcastlv.chat.bilibili.com/sub'
danmu_token = ''
reg_datas = []
async with aiohttp.ClientSession() as session:
async with session.get(f"https://api.live.bilibili.com/room/v1/Room/room_init?id={url.split('/')[-1]}",
async with aiohttp.ClientSession(headers=Bilibili.headers) as session:
async with session.get("https://api.live.bilibili.com/room/v1/Room/room_init?id=" + match1(url, r'/(\d+)'),
timeout=5) as resp:
room_json = json.loads(await resp.text())
room_json = await resp.json()
room_id = room_json['data']['room_id']
async with session.get(f"https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id={room_id}",
timeout=5) as resp:
danmu_info = await resp.json()
danmu_token = danmu_info['data']['token']
try:
danmu_info = json.loads(await resp.text())
danmu_token = danmu_info['data']['token']
# 允许可能获取不到返回的host
danmu_host = danmu_info['data']['host_list'][0]
if type(danmu_host) is dict:
danmu_wss_url = f"wss://{danmu_host['host']}:{danmu_host.get('wss_port')}/sub"
except Exception:
danmu_wss_url = f"wss://{danmu_host['host']}:{danmu_host['wss_port']}/sub"
except:
pass
data = json.dumps({
'uid': 0,
'roomid': room_id,
'protover': 3,
'platform': 'web',
'type': 2,
'key': danmu_token,
}, separators=(',', ':')).encode('ascii')
data = (pack('>i', len(data) + 16) + b'\x00\x10\x00\x01' +
pack('>i', 7) + pack('>i', 1) + data)
reg_datas.append(data)
data = json.dumps({
'uid': 0,
'roomid': room_id,
'protover': 3,
'platform': 'web',
'type': 2,
'key': danmu_token,
}, separators=(',', ':')).encode('ascii')
reg_datas = [(pack('>i', len(data) + 16) + b'\x00\x10\x00\x01' + pack('>i', 7) + pack('>i', 1) + data)]
return danmu_wss_url, reg_datas