iqiyi.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import requests
  2. import execjs
  3. import re
  4. import time
  5. from urllib.parse import quote, unquote
  6. class iqiyi:
  7. def __init__(self, url):
  8. self.url = url
  9. self.headers = {
  10. "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¬"
  11. }
  12. self.authkey = self.load_auth_js()
  13. self.cmd5js = self.load_cmd5x_js()
  14. def load_auth_js(self):
  15. return execjs.compile(open("./js/iqiyi.js").read())
  16. def load_cmd5x_js(self):
  17. return execjs.compile(open("./js/cmd5x.js").read())
  18. def get_tvid(self):
  19. res = requests.get(self.url, headers=self.headers)
  20. # print(res.text)
  21. tvid = re.findall("tvid=(.*?)&aid", res.text)[0]
  22. vid = re.findall('"vid":"(.*?)",', res.text)[0]
  23. # print(tvid)
  24. return tvid, vid
  25. def join_params(self):
  26. tvid, vid = self.get_tvid()
  27. _time = int(time.time() * 1000)
  28. params = {
  29. "tvid": tvid,
  30. "bid": "300",
  31. "vid": vid,
  32. "src": "01080031010000000000",
  33. "vt": "0",
  34. "rs": "1",
  35. "uid": "",
  36. "ori": "pcw",
  37. "ps": "1",
  38. "k_uid": "1bf80ab6e72de7ab4a42f4db91bd530b",
  39. "pt": "0",
  40. "d": "0",
  41. "s": "",
  42. "lid": "",
  43. "cf": "",
  44. "ct": "",
  45. "authKey": self.authkey.call("auth", self.authkey.call("auth", "") + f"{_time}{tvid}"),
  46. "k_tag": "1",
  47. "ost": "undefined",
  48. "ppt": "undefined",
  49. "dfp": "a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e",
  50. "locale": "zh_cn",
  51. "prio": quote('{"ff":"f4v","code":2}'),
  52. "pck": "",
  53. "k_err_retries": "0",
  54. "up": "",
  55. "qd_v": "2",
  56. "tm": _time,
  57. "qdy": "a",
  58. "qds": "0",
  59. "k_ft1": "706436220846084",
  60. "k_ft4": "36283952406532",
  61. "k_ft5": "1",
  62. "bop": quote(
  63. '{"version":"10.0","dfp":"a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e"}'),
  64. "ut": "0"
  65. }
  66. temp = "/dash?"
  67. for k, v in params.items():
  68. temp += k + "=" + str(v) + "&"
  69. vf = self.cmd5js.call("parse_vf", temp[:-1])
  70. params['vf'] = vf
  71. # requests 会再次进行url编码,所以一开始怎么弄都不对!!!!这里要解码!!
  72. params["bop"] = unquote(params["bop"])
  73. params["prio"] = unquote(params["prio"])
  74. return params
  75. def start(self):
  76. params = self.join_params()
  77. res = requests.get("https://cache.video.iqiyi.com/dash", params=params, headers=self.headers)
  78. print(res.text)
  79. if __name__ == '__main__':
  80. iqiyi().start()