运用tkinter做了一个能下载歌曲的小程序

直接上代码吧!

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,如果要运行这个代码,记得添加这张图片。
注意:这个小程序仅只能一次下一种歌曲。
运行结果:
在这里插入图片描述

发布了51 篇原创文章 · 获赞 299 · 访问量 9186

猜你喜欢

转载自blog.csdn.net/qq_45404396/article/details/104475306