Подключение к сокету возвращает не все данные
Пытаюсь получить данные с сайта о играх, которые находятся в лайве, однако подключение к сокету не возвращает все данные, а именно возвращается первые 5 записей и программа замирает. Искал похожую проблему, ничего не нашёл. Возможно каким либо способом получить все возвращаемые записи?
URL: https://mainnet.dexsport.io/sports?setIframePath=%2Flive
WSS: wss://prod.dexsport.work/ws?lang=en&cid=DexSport
Код для запуска:
import websockets
import asyncio
import json
async def dexSpoData(wss):
async with websockets.connect(wss) as client:
while True:
data = json.loads(await client.recv())
print(data)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(dexSpoData('wss://prod.dexsport.work/ws?lang=en&cid=DexSport'))
Результат с неполными данными в виде изображения: [1]: https://i.stack.imgur.com/vOgRA.png
Получаемые данные:
['timestamp', 1659981565170]
['sessionId', '01f5a77fa5c2562a9be8243e2046b64a']
['language', 'en']
['config', {'thresholdTimeout': 50, 'threshold': 100, 'lang': 'en', 'cid': 'DexSport', 'disciplines': [{'id': 'football', 'children': []}, {'id': 'efootball', 'children': ['efootball-bots']}, {'id': 'tennis', 'children': []}, {'id': 'etennis', 'children': ['etennis-bots']}, {'id': 'basketball', 'children': []}, {'id': 'ebasketball', 'children': ['ebasketball-bots']}, {'id': 'csgo', 'children': []}, {'id': 'hockey', 'children': []}, {'id': 'ehockey', 'children': []}, {'id': 'dota2', 'children': []}, {'id': 'american-football', 'children': []}, {'id': 'rocket-league', 'children': ['rocket-league-bots']}, {'id': 'call-of-duty', 'children': []}, {'id': 'pubg', 'children': []}, {'id': 'ow', 'children': []}, {'id': 'sc2', 'children': []}, {'id': 'valorant', 'children': []}, {'id': 'rainbow6', 'children': []}, {'id': 'warcraft3', 'children': []}, {'id': 'king-of-glory', 'children': []}, {'id': 'arena-of-valor', 'children': []}, {'id': 'basketball3x3', 'children': []}, {'id': 'volleyball', 'children': []}, {'id': 'tabletennis', 'children': []}, {'id': 'baseball', 'children': []}, {'id': 'handball', 'children': []}, {'id': 'mma', 'children': []}, {'id': 'emma', 'children': []}, {'id': 'boxing', 'children': []}, {'id': 'futsal', 'children': []}, {'id': 'snooker', 'children': []}, {'id': 'cricket', 'children': []}, {'id': 'rugby', 'children': []}]}]```
Ответы (1 шт):
Нужно периодически слать(отправлять) пакеты join с ключом как это делает сайт, чтобы получать ответы.
сначала
["join","line",["2"]]
["join","count",["football", ...
["join","discipline",["2.football","2.csgo", ...
Потом достаёшь оттуда tournamentIds и отправляешь
["join","tournament",["2.football.21576","2.football.31 ...
Достаёшь оттуда eventIds
["join","event",["2.13431594","2.13416089" ....
А оттуда mainMarketIds и уже ловишь результаты по этим маркерам через
["join","market",["2.13456642.62f151631b881c8a8267d149" ....
Притом маркеры обновляют свой хвост и Вам нужно переодически слать ["join","market" выдергивая их из последнего сообщения.