mirror of
https://github.com/xhongc/music-tag-web.git
synced 2026-02-02 17:59:07 +08:00
102 lines
5.1 KiB
Python
102 lines
5.1 KiB
Python
import requests
|
|
from time import time
|
|
from json import loads
|
|
from random import randint
|
|
from .public import readFile, getCookie
|
|
from .encrypt import weEncrypt, linuxEncrypt, eEncrypt
|
|
|
|
|
|
userAgents = [
|
|
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
|
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
|
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
|
|
'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36',
|
|
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36',
|
|
'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36',
|
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89;GameHelper',
|
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1',
|
|
'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1',
|
|
'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36',
|
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:46.0) Gecko/20100101 Firefox/46.0',
|
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
|
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4',
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0',
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586'
|
|
]
|
|
|
|
|
|
class send:
|
|
def __init__(self, data={}, encrypt_method="weapi", timeout=10, url=""):
|
|
self.BASE_URL = "https://music.163.com/"
|
|
self.headers = {
|
|
"User-Agent": userAgents[randint(0, len(userAgents)) - 1],
|
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
"Referer": self.BASE_URL
|
|
}
|
|
self.session = requests.session()
|
|
self.encrypt_method = encrypt_method
|
|
self.data = data
|
|
self.timeout = timeout
|
|
self.url = url
|
|
|
|
def __url(self, url):
|
|
if url == "":
|
|
return self.BASE_URL+"api/linux/forward"
|
|
if url[:4] == "http":
|
|
return url
|
|
return self.BASE_URL + url
|
|
|
|
def __cookies(self, data={}):
|
|
try:
|
|
cookies = getCookie()
|
|
except:
|
|
return data
|
|
return {**data, **cookies}
|
|
|
|
def encrypt(self, data):
|
|
cookie = self.__cookies()
|
|
if self.encrypt_method == "linuxapi":
|
|
self.headers["User-Agent"] = userAgents[0]
|
|
data["method"] = "POST"
|
|
return linuxEncrypt(data)
|
|
elif self.encrypt_method == "weapi":
|
|
data["csrf_token"] = cookie["__csrf"] if "__csrf" in cookie else ""
|
|
return weEncrypt(data)
|
|
elif self.encrypt_method == "eapi":
|
|
data["header"] = {
|
|
'osver': "",
|
|
"appver": "8.0.0",
|
|
"channel": "",
|
|
"deviceId": "",
|
|
"mobilename": "",
|
|
"os": "android",
|
|
"resolution": "1920x1080",
|
|
"versioncode": "140",
|
|
"buildver": str(int(time())),
|
|
"requestId": str(int(time()*100))+"_0"+str(randint(100, 999)),
|
|
"__csrf": cookie["__csrf"] if "__csrf" in cookie else ""
|
|
}
|
|
if "MUSIC_U" in cookie: data["header"]["MUSIC_U"] = cookie["MUSIC_U"]
|
|
if "MUSIC_A" in cookie: data["header"]["MUSIC_A"] = cookie["MUSIC_A"]
|
|
self.headers["Cookie"] = ''.join(map(lambda key: f"{key}={data['header'][key]};",data["header"]))
|
|
return eEncrypt(self.url, data)
|
|
return data
|
|
|
|
def POST(self, url, cookie={}):
|
|
response = self.session.post(self.__url(url),
|
|
data=self.encrypt(self.data),
|
|
headers=self.headers,
|
|
cookies=self.__cookies(cookie),
|
|
timeout=self.timeout)
|
|
return response
|
|
|
|
def GET(self, url, cookie={}):
|
|
if self.encrypt_method == "eapi":
|
|
self.headers["User-Agent"] = userAgents[-1]
|
|
response = self.session.get(self.__url(url),
|
|
headers=self.headers,
|
|
cookies=self.__cookies(cookie),
|
|
timeout=self.timeout)
|
|
return response
|