直接上代码吧!
import tkinter as tk
import time
import requests
import urllib.parse as parse
import json
import os
def Mou_music(music_name):
keyword = parse.urlencode({'keyword': music_name})
keyword = keyword[keyword.find('=') + 1:]
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}
url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery1124042761514747027074_1580194546707&keyword=' + keyword + '&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1580194546709'
json_1=requests.get(url=url,headers=headers).text
json_1=json_1[json_1.find('(')+1:-2]
json_1=json.loads(json_1,encoding='utf-8')
song_name=[];song_hash=[];song_id=[]
str_1=json_1['data']['lists']
for i in range(len(str_1)):
song_name.append(str_1[i]['FileName']) # 歌曲名称
song_hash.append(str_1[i]['FileHash']) # 歌曲下载链接的两个参数
song_id.append(str_1[i]['AlbumID'])
try:
os.mkdir('./某某音乐下载')
except:
pass
finally:
for i in range(len(song_name)): # 对歌名进行处理
song_name[i]=song_name[i].replace('</em>','')
song_name[i]=song_name[i].replace('<em>','')
song_name[i]='{}.'.format(i+1)+song_name[i]
with open('./某某音乐下载/index.txt','a',encoding='utf-8') as f:
f.write(song_name[i]+'\t'+song_hash[i]+'\t'+song_id[i]+'\n')
return song_name
def tkinter_music():
root = tk.Tk()
root.title('某某音乐')
root.geometry('447x400')
input_label = tk.Label(root, text='歌曲名称:', font=('楷体', 16))
input_label.grid()
photo = tk.PhotoImage(file='./13.gif')
# 输入框
v = tk.StringVar()
e = tk.Entry(root, textvariable=v, font=('隶书', 16))
e.grid(row=0, column=1, sticky=tk.E)
# 列表框
list_1 = tk.Listbox(root, font=('华文行楷', 16), width=40)
list_1.grid(row=1, columnspan=2)
# 提示
label_1 = tk.Label(root, text='注意:下面还有,总共--首歌', font=('宋体', 16), bg='black', fg='white')
label_1.grid(row=2, columnspan=2)
def Select():
music_name=v.get()
list_2=Mou_music(music_name) # 歌曲名称列表
for i in range(len(list_2)):
list_1.insert(tk.END, str(list_2[i]))
label_1 = tk.Label(root, text='注意:下面还有,总共{}首歌'.format(len(list_2)), font=('宋体', 16), bg='black', fg='white')
label_1.grid(row=2, columnspan=2)
root.update()
# 搜索按钮
button_1 = tk.Button(root, image=photo,command=Select)
button_1.grid(row=3, column=0, sticky=tk.W)
def Select_1():
with open('./某某音乐下载/index.txt','r',encoding='utf-8') as f:
str_1=f.read()
list2=str_1.split('\n')[:-1]
dict_hash={};dict_id={}
for str_2 in list2:
list3=str_2.split('\t')
dict_hash[list3[0]]=list3[1]
dict_id[list3[0]]=list3[2]
musict_name=list_1.get(tk.ACTIVE)
hash1=dict_hash[musict_name]
id1=dict_id[musict_name]
url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=' + hash1\
+ '&album_id=' + id1 + '&dfid=2SSV0x4LWcsx0iylej1F6w7P&mid=44328d3dc4bfce21cf2b95cf9e76b968&platid=4'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}
js_content = requests.get(url=url,headers=headers)
js_content.encoding='utf-8'
str_3 = js_content.text # 所加载的js中的内容
if 'play_backup_url' in str_3:
dict_2=json.loads(str_3)
music_url=dict_2['data']['play_backup_url']
content=requests.get(url=music_url).content
with open('./某某音乐下载/{}.mp3'.format(musict_name),'wb') as f:
f.write(content)
for i in range(1, 101):
label_2 = tk.Label(root, text='{}%|{}'.format(i, int(i / 2 % 51) * '■'))
label_2.grid(row=4, columnspan=2, sticky=tk.W)
time.sleep(0.125)
root.update()
label_3 = tk.Label(root, text='下载完毕!', font=('楷体', 16))
label_3.grid(row=5,columnspan=2,sticky=tk.W)
else:
label_3 = tk.Label(root, text='对不起,没有该歌曲的权限!', font=('楷体', 16))
label_3.grid(row=5,columnspan=2,sticky=tk.W)
# 下载按钮
button_2 = tk.Button(root, text='下载', font=('楷体', 16),command=Select_1)
button_2.grid(row=3, column=1, sticky=tk.E)
tk.mainloop()
def removefile():
os.remove(path='./某某音乐下载/index.txt')
if __name__ == '__main__':
tkinter_music()
removefile()
print('声明:本小程序仅供学习和娱乐,严禁用于商业用途,一经查处,概不负责!')
代码中那张图片为
文件名为13.gif,如果要运行这个代码,记得添加这张图片。
注意:这个小程序仅只能一次下一种歌曲。
运行结果: