123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import time
- import requests
- import re
- from hashlib import md5
- import json
- class YouKu:
- def __init__(self, url):
- self.url = "https://acs.youku.com/h5/mtop.youku.play.ups.appinfo.get/1.1/"
- self.int_time = int(time.time()) * 1000
- # self.vid = "XNTQwMTgxMTE2"
- self.video_url = url
- # 用于存储show_id,videoId
- self.params = {}
- self.get_current_showid()
- self.cookie = ''
- self.cookie_dict = {}
- self.language = {
- "ja": "日语",
- "guoyu": "国语",
- "default": "默认",
- "yue": "粤语",
- }
- def get_current_showid(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"
- }
- res = requests.get(self.video_url, headers=headers).text
- current_showid = re.findall("id_(.*?).html", res)[0]
- # video_id = re.findall("videoId: '(\d+)'", res)[0]
- self.params = {"show_id": current_showid}
- def get_steal_params(self):
- return json.dumps({
- "ccode": "0502",
- "client_ip": "192.168.1.1",
- "utid": re.findall("cna=(.*?);", self.cookie)[0],
- "client_ts": self.int_time,
- "version": "2.1.63",
- "ckey": "DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu/86PR1u/Wh1Ptd+WOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1/Y6hLK0OnCNxBj3+nb0v72gZ6b0td+WOZsHHWxysSo/0y9D2K42SaB8Y/+aD2K42SaB8Y/+ahU+WOZsHcrxysooUeND",
- })
- def get_biz_params(self):
- return json.dumps({
- "vid": re.findall("id_(.*?).html", self.video_url)[0],
- "play_ability": "16782592", # 写死在js里的
- "current_showid": self.params["show_id"],
- "preferClarity": "4", # 貌似是清晰度
- "extag": "EXT-X-PRIVINF", # 写死在js里的
- "master_m3u8": "1",
- "media_type": "standard,subtitle",
- "app_ver": "2.1.63",
- "drm_type": "19",
- "key_index": "web01",
- })
- def get_ad_params(self):
- return json.dumps({
- "vs": "1.0",
- "pver": "2.1.63",
- "sver": "2.0",
- "site": 1,
- "aw": "w",
- "fu": 0,
- "d": "0",
- "bt": "pc",
- "os": "mac",
- "osv": "",
- "dq": "auto",
- "atm": "",
- "partnerid": "null",
- "wintype": "interior",
- "isvert": 0,
- "vip": 0,
- "p": 1,
- "rst": "mp4",
- "needbf": 2,
- "avs": "1.0",
- })
- def get_data(self):
- return json.dumps({"steal_params": self.get_steal_params(), "biz_params": self.get_biz_params(),
- "ad_params": self.get_ad_params()})
- def join_params(self):
- data = self.get_data()
- return {
- 'jsv': '2.5.8',
- 'appKey': '24679788',
- 't': self.int_time,
- 'sign': md5(str(
- re.findall("m_h5_tk=(.*?)_", self.cookie)[0] + "&" + str(self.int_time) + "&" + "24679788" + "&" + str(
- data)).encode("utf8")).hexdigest(),
- 'api': 'mtop.youku.play.ups.appinfo.get',
- 'v': '1.1',
- 'timeout': '20000',
- 'YKPid': '20160317PLF000211',
- 'YKLoginRequest': 'true',
- 'AntiFlood': 'true',
- 'AntiCreep': 'true',
- 'type': 'jsonp',
- 'dataType': 'jsonp',
- 'callback': 'mtopjsonp3',
- "data": f"{data}"
- }
- def loads_jsonp(self, _jsonp):
- try:
- return json.loads(re.match(".*?({.*}).*", _jsonp, re.S).group(1))
- except:
- raise ValueError('Invalid Input')
- def start(self):
- headers = {
- "Accept": "*/*",
- "Host": "acs.youku.com",
- "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": self.cookie,
- "Referer": "https://v.youku.com/"
- }
- res = requests.get(self.url, params=self.join_params(), headers=headers)
- print(res.text)
- if __name__ == '__main__':
- YouKu().start()
|