diff --git a/kbs.py b/kbs.py new file mode 100644 index 0000000..96d821c --- /dev/null +++ b/kbs.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# @Time: 2021/5/22 8:02 +# @Project: real-url +# @Author: wbt5 +# @Blog: https://wbt5.com + +import hashlib +import time +from urllib.parse import parse_qsl, urlsplit + +import requests + + +class KBS: + """ + - 腾讯体育直播,看比赛频道 https://kbs.sports.qq.com/ + - 直播间地址类似:https://sports.qq.com/kbsweb/game.htm?mid=100006:2337840,需要其中的mid + - 只能获取免费观看的直播间 + - 请求参数params中的defn:蓝光fhd、超清shd、高清hd、标清sd,未登陆时最高获取超清,蓝光需VIP。 + """ + + def __init__(self, rid): + var = dict(parse_qsl(urlsplit(rid).query)) + mid = var.get('mid') + + with requests.Session() as self.s: + res = requests.get(f'https://matchweb.sports.qq.com/kbs/matchDetail?mid={mid}').json() + self.vid = res['data']['liveId'] + self.livepid = res['data']['programId'] + + def get_real_url(self): + tt = int(time.time()) + week = int(time.strftime('%w')) + s = ('06fc1464', '4244ce1b', '77de31c5', 'e0149fa2', '60394ced', '2da639f0', 'c2f0cf9f') + ha = f'{s[week - 1]}{self.vid}{tt}*#06#402011' + ckey = hashlib.md5(ha.encode('utf-8')).hexdigest() + params = { + 'cmd': 2, + 'cnlid': self.vid, + 'pla': 0, + 'stream': 2, + 'system': 0, + 'appVer': '3.0.0.138', + 'encryptVer': f'7.{week}', + 'qq': 0, + 'device': 'PC', + 'guid': '7dbd5b801e49ace0c8b3eba6b70c9ad6', + 'defn': 'shd', # shd默认超清 + 'host': 'qq.com', + 'livepid': self.livepid, + 'logintype': 1, + 'vip_status': 1, + 'livequeue': 1, + 'fntick': tt, + 'tm': tt, + 'sdtfrom': 1107, + 'platform': 40201, + 'cKey': ckey, + 'queueStatus': 0, + 'sphttps': 1, + 'authext': '{}', + 'auth_ext': '{}', + 'auth_from': 40001, + # 'callback': 'txvlive_videoinfoget_2767135792', + } + res = self.s.get('https://infozb6.video.qq.com/', params=params).json() + playurl = res.get('playurl', 0) + if res['errinfo']: + raise Exception('errinfo') + else: + return playurl + + +def get_real_url(rid): + try: + kbs = KBS(rid) + return kbs.get_real_url() + except Exception as e: + print('Exception:', e) + return False + + +if __name__ == '__main__': + r = input('请输入腾讯体育直播间地址:\n') + print(get_real_url(r))