74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
import requests
|
|
|
|
|
|
class migu:
|
|
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.cid = self.get_cid_or_mgdbId()
|
|
|
|
def get_cid_or_mgdbId(self):
|
|
if 'cid' in self.url:
|
|
return self.url.split("?")[-1].split("=")[-1]
|
|
return self.mgdbId_cover_pid(self.url.split("?")[-1].split("=")[-1])
|
|
|
|
def get_params(self):
|
|
return {
|
|
"contId": self.cid,
|
|
}
|
|
|
|
def mgdbId_cover_pid(self, mgdbId):
|
|
url = f"https://app-sc.miguvideo.com/vms-worldcup/v3/basic-data/all-view-list/{mgdbId}/2/3000060800"
|
|
res = requests.get(url, headers=self.headers).json()['body']['replayList']
|
|
if len(res) > 1:
|
|
for k, i in enumerate(res):
|
|
print(f'{k}->{i["name"]}')
|
|
print("检测到多个视频请选择你要解析视频的序号-> ")
|
|
pid = res[int(input("==> "))]['pID']
|
|
return pid
|
|
|
|
def str_cover_list(self, str):
|
|
return list(str)
|
|
|
|
def get_ddCalcu(self, puData_url):
|
|
params_dict = {}
|
|
query_string = puData_url.split("?")[-1]
|
|
for i in query_string.split("&"):
|
|
temp = i.split("=")
|
|
params_dict[temp[0]] = temp[1]
|
|
puData_list = self.str_cover_list(params_dict['puData'])
|
|
p = 0
|
|
result = []
|
|
while (2 * p) < len(puData_list):
|
|
result.append(puData_list[len(puData_list) - p - 1])
|
|
if p < len(puData_list) - p - 1:
|
|
result.append(params_dict['puData'][p])
|
|
if p == 1:
|
|
result.append('e')
|
|
if p == 2:
|
|
result.append(self.str_cover_list(params_dict['timestamp'])[6])
|
|
if p == 3:
|
|
result.append(self.str_cover_list(params_dict['ProgramID'])[2])
|
|
if p == 4:
|
|
result.append(self.str_cover_list(params_dict['Channel_ID'])[
|
|
len(self.str_cover_list(params_dict['Channel_ID'])) - 4])
|
|
p += 1
|
|
return ''.join(result)
|
|
|
|
def calc_url(self, url):
|
|
ddCalcu = self.get_ddCalcu(url)
|
|
return f"{url}&ddCalcu={ddCalcu}"
|
|
|
|
def start(self):
|
|
res = requests.get("https://webapi.miguvideo.com/gateway/playurl/v3/play/playurl", params=self.get_params(),
|
|
headers=self.headers)
|
|
puData_url = res.json()['body']['urlInfo']['url']
|
|
url = self.calc_url(puData_url)
|
|
print(url)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
migu().start()
|