mirror of
https://github.com/wbt5/real-url.git
synced 2025-06-16 15:59:57 +08:00
86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
# -*- 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#40201'
|
||
ckey = hashlib.md5(ha.encode('utf-8')).hexdigest()
|
||
params = {
|
||
'cmd': 2,
|
||
'cnlid': self.vid,
|
||
'pla': 0,
|
||
'stream': 2,
|
||
'system': 0,
|
||
'appVer': '3.0.0.142',
|
||
'encryptVer': f'7.{7 if week == 0 else week}',
|
||
'qq': 0,
|
||
'device': 'PC',
|
||
'guid': 'f56776a1fa52e9c8c4987bfecfbf0503',
|
||
'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))
|