dr_py/zhengban/tencent.py
2023-04-23 21:04:12 +08:00

199 lines
9.0 KiB
Python

import requests
import ujson
import time
import re
import execjs
from urllib.parse import quote
class tencent:
def __init__(self, url, timeout=None,cookie=''):
self.url = url
self.timeout = timeout or 2
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬",
"cookie":cookie,
}
self.int_time = int(time.time())
self.cookie = cookie
self.cookie_dict = {}
self.parse_cookie()
def parse_cookie(self):
if self.cookie:
for i in self.cookie.rstrip(';').split(";"):
kv = i.split("=")
print(kv)
self.cookie_dict[kv[0].strip()] = kv[1]
print(self.cookie_dict)
def get_vid(self):
vipUrl = self.url
vid = None
if vipUrl.find('v.qq.com/x/cover/') > -1:
_type = vipUrl.split("v.qq.com/x/cover/")[1].split(".html")[0]
if _type.find('/') > -1:
vid = _type.split("/")[1]
else:
r = requests.get(vipUrl, headers=self.headers)
html = r.text
vid = html.split('<link rel="canonical" href="https://v.qq.com/x/cover/')[1].split('/')[1].split('.')[0]
else:
if re.search('/page/.*\.html',vipUrl):
vid = vipUrl.split("/page/")[1].split(".html")[0]
else:
if vipUrl.find('&vid=') > -1:
vid = vipUrl.split("&vid=")[1].split("&")[0]
print(f'vid:{vid}')
return vid
def get_adparams(self):
pf = "in"
ad_type = quote("LD|KB|PVL")
pf_ex = "pc"
url = quote(self.url)
refer = quote("https://v.qq.com/")
ty = "web"
plugin = "1.0.0"
v = "3.5.57"
coverid = re.search("cover/(.*?).html", self.url).group(1)
coverid = coverid.split('/')[0]
# print(f'coverid:{coverid}')
vid = self.get_vid()
pt = ""
flowid = "f48222928272c7950a794ffbea32022c_10901"
vptag = quote("vptag=www_baidu_com|channel")
pu = "1"
chid = "0"
adaptor = "2"
dtype = "1"
live = "0"
resp_type = "json"
guid = "2634e72faf052aa51f98971b2a68718c"
req_type = 1
# from = "0"
appversion = "1.0.157"
uid = self.cookie_dict['vqq_vuserid']
tkn = self.cookie_dict['vqq_vusession']
lt = "qq"
platform = "10901"
opid = self.cookie_dict['vqq_openid']
atkn = self.cookie_dict['vqq_access_token']
appid = self.cookie_dict['vqq_appid']
tpid = "1"
result = f"pf={pf}&ad_type={ad_type}&pf_ex={pf_ex}&url={url}&refer={refer}&ty={ty}&plugin={plugin}&v={v}&coverid={coverid}&vid={vid}&pt={pt}&flowid={flowid}&vptag={vptag}&pu={pu}&chid={chid}&adaptor={adaptor}&dtype={dtype}&live={live}&resp_type={resp_type}&guid={guid}&req_type={req_type}&from=0&appversion={appversion}&" \
f"uid={uid}&tkn={tkn}&lt={lt}&platform={platform}&opid={opid}&atkn={atkn}&appid={appid}&tpid={tpid}"
return result
def get_vinfoparams(self):
spsrt = "1"
charge = "1"
defaultfmt = "auto"
otype = "ojson"
guid = "2634e72faf052aa51f98971b2a68718c"
# 随机数 + platform
flowid = "f48222928272c7950a794ffbea32022c_10901"
platform = "10901"
sdtfrom = "v1010"
defnpayver = "1"
appVer = "3.5.57"
host = "v.qq.com"
ehost = quote(self.url)
refer = "v.qq.com"
sphttps = "1"
tm = self.int_time
spwm = "4"
logintoken = quote(str({"main_login": self.cookie_dict['main_login'], "openid": self.cookie_dict['vqq_openid'],
"appid": self.cookie_dict['vqq_appid'],
"access_token": self.cookie_dict['vqq_access_token'],
"vuserid": self.cookie_dict['vqq_vuserid'],
"vusession": self.cookie_dict['vqq_vusession']}))
# print(f'logintoken:{logintoken}')
vid = self.get_vid()
defn = "fhd"
fhdswitch = "0"
show1080p = "1"
isHLS = "1"
dtype = "3"
sphls = "2"
spgzip = "1"
dlver = "2"
drm = "32"
hdcp = "1"
spau = "1"
spaudio = "15"
defsrc = "1"
encryptVer = "9.1"
cKey = self.get_cKey(platform, appVer, vid, guid, tm)
fp2p = "1"
spadseg = "3"
result = f"spsrt={spsrt}&charge={charge}&defaultfmt={defaultfmt}&otype={otype}&guid={guid}&flowid={flowid}&platform={platform}&sdtfrom={sdtfrom}&defnpayver={defnpayver}&appVer={appVer}&host={host}&ehost={ehost}&refer={refer}&sphttps={sphttps}&tm={tm}&spwm={spwm}&logintoken={logintoken}&vid={vid}&defn={defn}&fhdswitch={fhdswitch}&show1080p={show1080p}&isHLS={isHLS}&dtype={dtype}&sphls={sphls}&spgzip={spgzip}&dlver={dlver}&drm={drm}&hdcp={hdcp}&spau={spau}&spaudio={spaudio}&defsrc={defsrc}&encryptVer={encryptVer}&cKey={cKey}&fp2p={fp2p}&spadseg={spadseg}"
return result
def get_cKey(self, platform, version, vid, guid, tm):
file = './js/getck.js'
ctx = execjs.compile(open(file).read())
params = ctx.call("getckey", platform, version, vid, '', guid,
tm)
return params
def get_buid(self):
return "vinfoad"
def deal_data(self,data):
# print(data)
vinfo = ujson.loads(data['vinfo'])
vl = vinfo['vl']
urls = vl['vi'][0]['ul']['ui']
# print(urls)
try:
pt = urls[-1]['hls']['pt']
except:
pt = ''
url = urls[-1]['url']
realUrl = url + pt
print(realUrl)
return realUrl
def start(self):
ad_params = self.get_adparams()
vinfoparams = self.get_vinfoparams()
buid = self.get_buid()
params = {"buid": buid,
"adparam": ad_params,
"vinfoparam": vinfoparams}
# print(params)
res = requests.post("https://vd.l.qq.com/proxyhttp", headers=self.headers, json=params)
data = res.json()
return self.deal_data(data)
if __name__ == '__main__':
# 控制台执行 document.cookie 获取
cookie = """
pgv_pvid=5805499462; iip=0; RK=yQaYRyNLbG; ptcz=2a0d041daba2e1e3872184cd999e01bf90678c0e492c5900527c802251d224ad; tvfe_boss_uuid=53b5e88a3ebeba2c; ts_uid=8123938908; tvfe_search_uid=225c6955-d257-4d4a-97d0-cc327ffea211; txv_boss_uuid=95755769-e482-3a22-3e9f-6f8d842da1a7; pgv_pvi=1381712896; logTrackKey=613d40c3fea04aafb45fc9642dd67b99; video_platform=2; main_login=qq; vqq_vuserid=1260982452; vqq_openid=406CA2296D6A3B970597D6CF1605B6B7; vqq_appid=101483052; qq_nick=feng; pgv_info=ssid=s1368217315; pac_uid=1_434857005; vversion_name=8.2.95; video_guid=3419ca23530808d22bb278e881e46647; video_omgid=3419ca23530808d22bb278e881e46647; _qpsvr_localtk=0.710205836458567; compared_guid=bc772040638cf0da; vqq_access_token=88AEE1A8BC32318537BC7D81586E44A4; o_cookie=434857005; qv_als=vzJJwNyUEiCeDF1UA11662524934RoBNzA==; video_bucketid=4; fqm_pvqid=0a2a19f9-b09d-48d2-835a-cee916bdb63f; fqm_sessionid=a2c625f7-98e9-4d69-adb4-ad82846832bc; uin=o0434857005; skey=@rZMv3mYSR; tab_experiment_str=8752038#9047927#8752037#9040406#9099387; bucket_id=9231009; last_refresh_time=1666604352564; last_refresh_vuserid=1260982452; ts_refer=m.v.qq.com/; qq_head=http://thirdqq.qlogo.cn/g?b=sdk&k=llMfAicCbslpBk4funDukzg&s=100&t=318; vqq_vusession=sj85gfjn1ZL5jGI_RW5lLA.N; ptag=m_v_qq_com|channel; tab_experiment_data=exp_id=9099387&status=1; ts_last=v.qq.com/x/cover/m441e3rjq9kwpsc.html
""".strip()
login_token = """
vqq_appid=101483052; vqq_openid=406CA2296D6A3B970597D6CF1605B6B7; vqq_vuserid=1260982452;vqq_vusession=Xd5bba2m9ByWls30Vi2FSQ.N; vqq_refresh_token=2D85975A29FB056EB6F9A338CB8F1EF5;vqq_next_refresh_time=6530;vqq_access_token=88AEE1A8BC32318537BC7D81586E44A4;main_login=qq;
""".strip()
auth_token = """
vqq_appid=101483052; vqq_openid=406CA2296D6A3B970597D6CF1605B6B7; vqq_vuserid=1260982452;vqq_vusession=
""".strip()
cookie = login_token
print(cookie)
# refresh_url = 'https://access.video.qq.com/user/auth_refresh?vappid=11059694&vsecret=fdf61a6be0aad57132bc5cdf78ac30145b6cd2c1470b0cfe&type=qq&g_tk=1698594290&g_vstk=270754686&g_actk=2412125&callback=jQuery191028559957521840595_1666665357793&_=1666665357794'
# headers = {
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
# "Referer":"https://v.qq.com/",
# # "cookie":cookie,
# "cookie":auth_token,
# }
# r = requests.get(refresh_url,headers=headers)
# print(r.text)
# 斗罗大陆
url = 'https://v.qq.com/x/cover/m441e3rjq9kwpsc/c00442r6ry6.html'
# 复仇者联盟
# url = 'https://v.qq.com/x/cover/v2098lbuihuqs11/m00314jtw6k.html'
vqq = tencent(url=url,cookie=cookie)
vqq.start()