N3RDN/JN/dr_py/zhengban/iqiyi.py

90 lines
2.8 KiB
Python
Raw Normal View History

2024-01-08 22:50:47 +08:00
import requests
import execjs
import re
import time
from urllib.parse import quote, unquote
class iqiyi:
def __init__(self, url):
self.url = url
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¬"
}
self.authkey = self.load_auth_js()
self.cmd5js = self.load_cmd5x_js()
def load_auth_js(self):
return execjs.compile(open("./js/iqiyi.js").read())
def load_cmd5x_js(self):
return execjs.compile(open("./js/cmd5x.js").read())
def get_tvid(self):
res = requests.get(self.url, headers=self.headers)
# print(res.text)
tvid = re.findall("tvid=(.*?)&aid", res.text)[0]
vid = re.findall('"vid":"(.*?)",', res.text)[0]
# print(tvid)
return tvid, vid
def join_params(self):
tvid, vid = self.get_tvid()
_time = int(time.time() * 1000)
params = {
"tvid": tvid,
"bid": "300",
"vid": vid,
"src": "01080031010000000000",
"vt": "0",
"rs": "1",
"uid": "",
"ori": "pcw",
"ps": "1",
"k_uid": "1bf80ab6e72de7ab4a42f4db91bd530b",
"pt": "0",
"d": "0",
"s": "",
"lid": "",
"cf": "",
"ct": "",
"authKey": self.authkey.call("auth", self.authkey.call("auth", "") + f"{_time}{tvid}"),
"k_tag": "1",
"ost": "undefined",
"ppt": "undefined",
"dfp": "a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e",
"locale": "zh_cn",
"prio": quote('{"ff":"f4v","code":2}'),
"pck": "",
"k_err_retries": "0",
"up": "",
"qd_v": "2",
"tm": _time,
"qdy": "a",
"qds": "0",
"k_ft1": "706436220846084",
"k_ft4": "36283952406532",
"k_ft5": "1",
"bop": quote(
'{"version":"10.0","dfp":"a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e"}'),
"ut": "0"
}
temp = "/dash?"
for k, v in params.items():
temp += k + "=" + str(v) + "&"
vf = self.cmd5js.call("parse_vf", temp[:-1])
params['vf'] = vf
# requests 会再次进行url编码所以一开始怎么弄都不对这里要解码
params["bop"] = unquote(params["bop"])
params["prio"] = unquote(params["prio"])
return params
def start(self):
params = self.join_params()
res = requests.get("https://cache.video.iqiyi.com/dash", params=params, headers=self.headers)
print(res.text)
if __name__ == '__main__':
iqiyi().start()