mirror of
https://github.com/letian1650/N3RD.git
synced 2025-01-25 04:05:17 +08:00
130 lines
4.3 KiB
Python
130 lines
4.3 KiB
Python
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()
|