mirror of
https://github.com/letian1650/N3RD.git
synced 2025-01-24 19:45:01 +08:00
199 lines
9.0 KiB
Python
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}&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() |