qq音乐(网页版)
import requests
from multiprocessing import Pool
class Music_QQ(object):
def __init__(self):
self.get_mid_url = '/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?'
self.get_vkey_url = '/cgi-bin/?'
self.get_song_url = '/'
self.get_mid_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer': '/n/yqq/playlist/',
'Origin': '',
'Sec-Fetch-Mode':'cors',
}
self.get_vkey_headers= {
'Origin': '',
'Referer': '/portal/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
self.get_song_headers= {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
self.parse()
def parse(self):
self.get_songmid()
def get_songmid(self):
song_infos = []
params = {
'type': '1',
'json': '1',
'utf8': '1',
'onlysong': '0',
'new_format': '1',
'disstid': '7010910521',
'g_tk': '5381',
'loginUin': '0',
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf-8',
'notice': '0',
'platform': '',
'needNewCode': '0',
}
# base_url = '/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid=7281518382&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=&needNewCode=0'
response = requests.get(self.get_mid_url,headers= self.get_mid_headers,params=params,verify=False)
# print(())
if response.status_code==200:
for item in response.json()['cdlist'][0]['songlist']:
mid = item['mid']
name = item['name']
song_infos.append((mid,name))
# print(song_infos)
#创建一个进程池对象
pool = Pool(4)
pool.map(self.get_vkeys,song_infos)
def get_vkeys(self,songinfo):
# print(songinfo)
mid = songinfo[0]
name = songinfo[1]
params = {
'g_tk': '5381',
'loginUin': '0',
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf-8',
'notice': '0',
'platform': '',
'needNewCode': '0',
'data': '{"req":{"module":"","method":"GetCdnDispatch","param":{"guid":"2557522780","calltype":0,"userip":""}},"req_0":{"module":"","method":"CgiGetVkey","param":{"guid":"2557522780","songmid":["'+mid+'"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}',
}
response = requests.get(self.get_vkey_url,headers = self.get_vkey_headers,params=params,verify = False)
# print(())
json_data = response.json()
purl = json_data['req_0']['data']['midurlinfo'][0]['purl']
# print(purl)
self.down_load(purl,name)
def down_load(self,purl,name):
url = self.get_song_url+purl
response = requests.get(url,headers = self.get_song_headers,verify = False)
filename = 'C:\\Users\\Administrator\\Desktop\\music1\\{}.m4a'.format(name)
try:
print('开始下载:', name, sep='')
with open(filename, 'wb') as fp:
fp.write(response.content)
print('下载成功:',name,sep='')
except Exception:
print('下载失败:',name,sep='')
if __name__ == '__main__':
Music_QQ()