From 61e84a9eca520b18db801278eeb0d7aef67b6a7e Mon Sep 17 00:00:00 2001 From: wbt5 Date: Sat, 15 May 2021 17:22:51 +0800 Subject: [PATCH] :bug: Fix zhanqi.py (#167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复战旗直播。 --- zhanqi.py | 53 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/zhanqi.py b/zhanqi.py index b499852..e18beaa 100644 --- a/zhanqi.py +++ b/zhanqi.py @@ -1,5 +1,8 @@ # 获取战旗直播(战旗TV)的真实流媒体地址。https://www.zhanqi.tv/lives # 默认最高画质 + +import json + import requests @@ -7,22 +10,48 @@ class ZhanQi: def __init__(self, rid): self.rid = rid + self.s = requests.Session() def get_real_url(self): - with requests.Session() as s: - res = s.get('https://m.zhanqi.tv/api/static/v2.1/room/domain/{}.json'.format(self.rid)) + + res = self.s.get('https://m.zhanqi.tv/api/static/v2.1/room/domain/{}.json'.format(self.rid)) + try: + res = res.json() + videoid = res['data']['videoId'] + status = res['data']['status'] + except (KeyError, json.decoder.JSONDecodeError): + raise Exception('Incorrect rid') + + if status == '4': + # 获取gid + res = self.s.get('https://www.zhanqi.tv/api/public/room.viewer') try: res = res.json() - videoid = res['data']['videoId'] - status = res['data']['status'] - if status == '4': - url = 'https://dlhdl-cdn.zhanqi.tv/zqlive/{}.flv?get_url=1'.format(videoid) - real_url = s.get(url).text - else: - raise Exception('未开播') - except: - raise Exception('直播间不存在') - return real_url + gid = res['data']['gid'] + except KeyError: + raise Exception('Getting gid incorrectly') + + # 获取cdn_host + res = self.s.get('https://umc.danuoyi.alicdn.com/dns_resolve_https?app=zqlive&host_key=alhdl-cdn.zhanqi.tv') + cdn_host, = res.json().get('redirect_domain') + + # 获取chain_key + data = { + 'stream': f'{videoid}.flv', + 'cdnKey': 202, + 'platform': 128, + } + headers = { + 'cookie': f'gid={gid}', + } + res = self.s.post('https://www.zhanqi.tv/api/public/burglar/chain', data=data, headers=headers).json() + chain_key = res['data']['key'] + url = f'https://{cdn_host}/alhdl-cdn.zhanqi.tv/zqlive/{videoid}.flv?{chain_key}&playNum=68072487067' \ + f'&gId={gid}&ipFrom=1&clientIp=&fhost=h5&platform=128 ' + + return url + else: + raise Exception('No streaming') def get_real_url(rid):