更新初始化房间API

This commit is contained in:
John Smith 2020-07-19 22:17:32 +08:00
parent d173228c5f
commit 6618bf5c48

View File

@ -14,8 +14,8 @@ import aiohttp
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ROOM_INIT_URL = 'https://api.live.bilibili.com/room/v1/Room/room_init' ROOM_INIT_URL = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom'
DANMAKU_SERVER_CONF_URL = 'https://api.live.bilibili.com/room/v1/Danmu/getConf' DANMAKU_SERVER_CONF_URL = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo'
HEADER_STRUCT = struct.Struct('>I2H2I') HEADER_STRUCT = struct.Struct('>I2H2I')
HeaderTuple = namedtuple('HeaderTuple', ('pack_len', 'raw_header_size', 'ver', 'operation', 'seq_id')) HeaderTuple = namedtuple('HeaderTuple', ('pack_len', 'raw_header_size', 'ver', 'operation', 'seq_id'))
@ -444,47 +444,48 @@ class BLiveClient:
async def init_room(self): async def init_room(self):
try: try:
async with self._session.get(ROOM_INIT_URL, params={'id': self._tmp_room_id}, async with self._session.get(ROOM_INIT_URL, params={'room_id': self._tmp_room_id},
ssl=self._ssl) as res: ssl=self._ssl) as res:
if res.status != 200: if res.status != 200:
logger.warning('room %d room_init失败%d %s', self._tmp_room_id, logger.warning('room %d init_room失败:%d %s', self._tmp_room_id,
res.status, res.reason) res.status, res.reason)
return False return False
data = await res.json() data = await res.json()
if data['code'] != 0: if data['code'] != 0:
logger.warning('room %d room_init失败%s', self._tmp_room_id, data['msg']) logger.warning('room %d init_room失败:%s', self._tmp_room_id, data['msg'])
return False return False
if not self._parse_room_init(data['data']): if not self._parse_room_init(data['data']):
return False return False
except aiohttp.ClientConnectionError: except aiohttp.ClientConnectionError:
logger.exception('room %d room_init失败', self._tmp_room_id) logger.exception('room %d init_room失败:', self._tmp_room_id)
return False return False
try: try:
async with self._session.get(DANMAKU_SERVER_CONF_URL, params={'room_id': self._tmp_room_id}, async with self._session.get(DANMAKU_SERVER_CONF_URL, params={'id': self._room_id, 'type': 0},
ssl=self._ssl) as res: ssl=self._ssl) as res:
if res.status != 200: if res.status != 200:
logger.warning('room %d getConf失败%d %s', self._tmp_room_id, logger.warning('room %d getConf失败%d %s', self._room_id,
res.status, res.reason) res.status, res.reason)
return False return False
data = await res.json() data = await res.json()
if data['code'] != 0: if data['code'] != 0:
logger.warning('room %d getConf失败%s', self._tmp_room_id, data['msg']) logger.warning('room %d getConf失败%s', self._room_id, data['msg'])
return False return False
self._host_server_list = data['data']['host_server_list'] self._host_server_list = data['data']['host_list']
self._host_server_token = data['data']['token'] self._host_server_token = data['data']['token']
if not self._host_server_list: if not self._host_server_list:
logger.warning('room %d getConf失败host_server_list为空') logger.warning('room %d getConf失败host_server_list为空')
return False return False
except aiohttp.ClientConnectionError: except aiohttp.ClientConnectionError:
logger.exception('room %d getConf失败', self._tmp_room_id) logger.exception('room %d getConf失败', self._room_id)
return False return False
return True return True
def _parse_room_init(self, data): def _parse_room_init(self, data):
self._room_id = data['room_id'] room_info = data['room_info']
self._room_short_id = data['short_id'] self._room_id = room_info['room_id']
self._room_owner_uid = data['uid'] self._room_short_id = room_info['short_id']
self._room_owner_uid = room_info['uid']
return True return True
def _make_packet(self, data, operation): def _make_packet(self, data, operation):
@ -504,7 +505,7 @@ class BLiveClient:
'roomid': self._room_id, 'roomid': self._room_id,
'protover': 2, 'protover': 2,
'platform': 'web', 'platform': 'web',
'clientver': '1.8.2', 'clientver': '1.14.3',
'type': 2, 'type': 2,
'key': self._host_server_token 'key': self._host_server_token
} }