| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 641 人关注过本帖
标题:下列代码无法下载mp3音乐,请高手指点!
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:909
专家分:3
注 册:2018-1-4
收藏
 问题点数:0 回复次数:7 
下列代码无法下载mp3音乐,请高手指点!
下列代码无法下载mp3音乐,请高手指点!万分感谢!!!
(由于是新手,不喜勿喷,全当路过。)
主要是 def get_kuwo_music(self):部分

import os
import tkinter as tk
from tkinter import ttk, messagebox as mes_box
import webbrowser
import PySimpleGUI as Sg
import requests
from retrying import retry

class SetUI:
    def __init__(self, weight=1000, height=600):
        self.ui_weight = weight
        self.ui_height = height
        self.title = "好课优选·音乐破解软件"
        self.ui_root = tk.Tk(className=self.title)
        self.ui_url = tk.StringVar()
        self.ui_var = tk.IntVar()
        self.ui_var.set(1)
        self.show_result = None
        self.song_num = None
        self.response_data = None
        self.song_url = None
        self.song_name = None
        self.song_author = None

    def set_ui(self):
        """构建界面"""
        frame_1 = tk.Frame(self.ui_root)
        frame_2 = tk.Frame(self.ui_root)
        frame_3 = tk.Frame(self.ui_root)
        frame_4 = tk.Frame(self.ui_root)

        # 菜单
        ui_menu = tk.Menu(self.ui_root)
        self.ui_root.config(menu=ui_menu)
        file_menu = tk.Menu(ui_menu, tearoff=0)
        ui_menu.add_cascade(label='菜单', menu=file_menu)
        file_menu.add_command(label='使用说明', command=lambda: webbrowser.open('https://www.baidu.com'))
        file_menu.add_command(label='关于作者', command=lambda: webbrowser.open('https://www.baidu.com'))
        file_menu.add_command(label='退出', command=self.ui_root.quit)

        # 控件内容设置
        choice_passageway = tk.Label(frame_1, text='请选择音乐搜索通道:', padx=10, pady=10)
        passageway_button_1 = tk.Radiobutton(frame_1, text='酷我', variable=self.ui_var, value=1, width=10, height=3)
        passageway_button_2 = tk.Radiobutton(frame_1, text='网易云', variable=self.ui_var, value=2, width=10, height=3)
        passageway_button_3 = tk.Radiobutton(frame_1, text='QQ音乐', variable=self.ui_var, value=3, width=10, height=3)
        passageway_button_4 = tk.Radiobutton(frame_1, text='酷狗', variable=self.ui_var, value=4, width=10, height=3)

        input_link = tk.Label(frame_2, text='请输入歌曲名或歌手:')
        entry_style = tk.Entry(frame_2, textvariable=self.ui_url, highlightcolor='Fuchsia', highlightthickness=1, width=35)
        label2 = tk.Label(frame_2, text="")
        play_button = tk.Button(frame_2, text='搜索', font=('楷体', 11), fg='Purple', width=2, height=1, command=self.get_kuwo_music)
        label3 = tk.Label(frame_2, text="")
        # 表格样式
        columns = ("序号", "歌手", "歌曲", "专辑")
        self.show_result = ttk.Treeview(frame_3, height=20, show="headings", columns=columns)

        # 下载
        download_button = tk.Button(frame_4, text='下载', font=('楷体', 11), fg='Purple', width=6, height=1, padx=5, pady=5, command=self.download_music)

        # 控件布局
        frame_1.pack()
        frame_2.pack()
        frame_3.pack()
        frame_4.pack()
        choice_passageway.grid(row=0, column=0)
        passageway_button_1.grid(row=0, column=1)
        passageway_button_2.grid(row=0, column=2)
        passageway_button_3.grid(row=0, column=3)
        passageway_button_4.grid(row=0, column=4)
        input_link.grid(row=0, column=0)
        entry_style.grid(row=0, column=1)
        label2.grid(row=0, column=2)
        play_button.grid(row=0, column=3, ipadx=10, ipady=10)
        label3.grid(row=0, column=4)
        self.show_result.grid(row=0, column=4)
        download_button.grid(row=0, column=5)

        # 设置表头
        self.show_result.heading("序号", text="序号")
        self.show_result.heading("歌手", text="歌手")
        self.show_result.heading("歌曲", text="歌曲")
        self.show_result.heading("专辑", text="专辑")

        # 设置列
        self.show_result.column("序号", width=100, anchor='center')
        self.show_result.column("歌手", width=200, anchor='center')
        self.show_result.column("歌曲", width=200, anchor='center')
        self.show_result.column("专辑", width=300, anchor='center')

        # 鼠标点击
        self.show_result.bind('<ButtonRelease-1>', self.get_song_url)

    @retry(stop_max_attempt_number=5)
    def get_kuwo_music(self):
        """搜索酷我音乐(仅实现酷我,其他通道可自行扩展)"""
        # 清空treeview表格数据
        for item in self.show_result.get_children():
            self.show_result.delete(item)

        headers = {
            'accept': 'application/json,text/plain,*/*',
            'accept-encoding': 'gzip, deflate',
            'accept-language': 'zh-CN,zh;q=0.9',
            'cache-control': 'no-cache',
            'Connection': 'keep-alive',
            'csrf': 'HH3GHIQ0RYM',
            #'Referer': 'http://www.',
            'Referer':'http://www.',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
            #'cookie': '_ga=GA1.2.150251374.1775911325; _gid=GA1.2.1036068870.1775911325; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1775962810,1775963266,1775978949,1775980328; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1775980328; HMACCOUNT=6C051FAE07DABF5F; _ga_ETPBRPM9ML=GS2.2.s1775978949$o3$g1$t1775980346$j42$l0$h0; Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=YWBKP6wM6b7cC5mMeES6riryNfCbDiZR'
            'cookie':'_ga=GA1.2.150251374.1775911325; _gid=GA1.2.1036068870.1775911325; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1775978949,1775980328,1775999664,1776082346; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1776082346; HMACCOUNT=6C051FAE07DABF5F; _gat=1; Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=c7CpPeX8w6k236NXNfD5nQWeWpDYNjGF; _ga_ETPBRPM9ML=GS2.2.s1776082346$o5$g1$t1776082378$j28$l0$h0'
        }

        search_input = self.ui_url.get()
        if len(search_input) > 0:
            search_url = 'http://www.'
            search_data = {
                'key': search_input,
                'pn': '1',
                'rn': '80',
                'httpsStatus': '1',
                'reqid': '858597c1-b18c-11ec-83e4-9d53d2ff08ff'
            }
            try:
                resp = requests.get(search_url, params=search_data, headers=headers, timeout=20)
                self.response_data = resp.json()

               
                if 'data' not in self.response_data:
                    mes_box.showerror(title='错误', message='API返回异常,缺少data字段,请稍后重试。\n' + str(self.response_data))
                    return
                data_obj = self.response_data['data']
                if 'list' not in data_obj:
                    mes_box.showerror(title='错误', message='搜索结果格式错误,缺少list字段。\n' + str(data_obj))
                    return

                total = data_obj.get('total', 0)
                if int(total) <= 0:
                    mes_box.showerror(title='错误', message='搜索:{} 不存在。'.format(search_input))
                    return

                songs_data = data_obj['list']
                for i in range(len(songs_data)):
                    
                    song_name = songs_data[i].get('name', '未知歌曲')
                    artist = songs_data[i].get('artist', '未知歌手')
                    album = songs_data[i].get('album', '未知专辑')
                    self.show_result.insert('', i, values=(i + 1, artist, song_name, album))

            except requests.exceptions.Timeout:
                mes_box.showerror(title='错误', message='搜索超时,请重新输入后再搜索!')
            except Exception as e:
                mes_box.showerror(title='错误', message=f'搜索失败:{str(e)}')
        else:
            mes_box.showerror(title='错误', message='未输入要查询的歌曲或歌手,请输入后搜索!')

    def get_song_url(self, event):
        """获取下载歌曲的地址"""
        for item in self.show_result.selection():
            item_text = self.show_result.item(item, "values")
            self.song_num = int(item_text[0])
            if self.song_num is not None:
                # 同样需要安全访问 response_data
                if self.response_data is None or 'data' not in self.response_data:
                    mes_box.showerror(title='错误', message='未获取到搜索结果,请先搜索!')
                    return
                songs_data = self.response_data['data'].get('list')
                if not songs_data:
                    mes_box.showerror(title='错误', message='搜索结果列表为空!')
                    return
                if self.song_num - 1 >= len(songs_data):
                    mes_box.showerror(title='错误', message='选择的歌曲序号无效!')
                    return

                songs_req_id = self.response_data.get('reqid', '')
                song_rid = songs_data[self.song_num - 1]['rid']
                music_url = f'http://www.{song_rid}&type=convert_url3&httpStatus=1&reqId={songs_req_id}'
                try:
                    resp = requests.get(music_url)
                    response_data = resp.json()
                    self.song_url = response_data.get('data', {}).get('url')
                    if not self.song_url:
                        mes_box.showerror(title='错误', message='获取下载链接失败,可能歌曲无版权或需要付费。')
                        return
                    self.song_name = songs_data[self.song_num - 1].get('name', '未知歌曲')
                    self.song_author = songs_data[self.song_num - 1].get('artist', '未知歌手')
                except Exception as e:
                    mes_box.showerror(title='错误', message=f'获取播放地址失败:{str(e)}')
            else:
                mes_box.showerror(title='错误', message='未选择要下载的歌曲,请选择')

    def download_music(self):
        """下载音乐"""
        save_dir = './KuWoMusic'
        if not os.path.exists(save_dir):
            os.mkdir(save_dir)

        if self.song_num is not None and self.song_url:
            song_name = f'{self.song_name}--{self.song_author}.mp3'
            try:
                save_path = os.path.join(save_dir, song_name).replace('\\', '/')
                true_path = os.path.abspath(save_path)
                resp = requests.get(self.song_url, timeout=30)
                with open(save_path, 'wb') as file:
                    file.write(resp.content)
               
                mes_box.showinfo(title='下载成功', message=f'歌曲:{self.song_name},保存地址为:{true_path}')
            except Exception as e:
                mes_box.showerror(title='错误', message=f'下载失败:{str(e)}')
        else:
            mes_box.showerror(title='错误', message='未选择要下载的歌曲,请先单击表格选择后再下载')

    def progress_bar(self, file_size):
        """任务加载进度条"""
        layout = [[Sg.Text('任务完成进度')], [Sg.ProgressBar(file_size, orientation='h', size=(40, 20), key='progressBar')], [Sg.Cancel()]]
        window = Sg.Window('机器人执行进度', layout)      
        _progress_bar = window['progressBar']
        for i in range(file_size):
            event, values = window.read(timeout=10)
            if event == 'Cancel' or event is None:
                break
            _progress_bar.UpdateBar(i + 1)
        window.close()

    def center_window(self):
        """UI界面窗口设置:居中"""
        ws = self.ui_root.winfo_screenwidth()
        hs = self.ui_root.winfo_screenheight()
        x = (ws - self.ui_weight) // 2
        y = (hs - self.ui_height) // 2
        self.ui_root.geometry(f'{self.ui_weight}x{self.ui_height}+{x}+{y}')

    def loop(self):
        """启动主循环"""
        self.ui_root.resizable(False, False)
        self.center_window()
        self.set_ui()
        self.ui_root.mainloop()


if __name__ == '__main__':
    app = SetUI()
    app.loop()

[此贴子已经被作者于2026-4-14 18:29编辑过]

搜索更多相关主题的帖子: title text 歌曲 错误 message 
2026-04-14 18:26
DANSON
Rank: 2
等 级:论坛游民
帖 子:209
专家分:90
注 册:2025-10-4
收藏
得分:0 
回复 楼主 王咸美
你是不是进错房门了?
2026-04-15 08:25
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:378
专家分:2417
注 册:2023-6-29
收藏
得分:0 
2026-04-15 10:06
王咸美
Rank: 1
等 级:新手上路
帖 子:909
专家分:3
注 册:2018-1-4
收藏
得分:0 
@yiyanxiyin 谢谢,能用了,如果要下载酷我音乐,代码应如何修改,望赐教!

2026-04-15 10:58
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:378
专家分:2417
注 册:2023-6-29
收藏
得分:0 
试试:

只要你电脑能播放酷我的mp3,说明 MP3 数据已经传输到了你的电脑内存中
可以使用工具Audacity(免费开源音频编辑软件)来录音
操作:
打开 Audacity。
在录音设备中选择 “立体声混音” (Stereo Mix)(如果没有,需要在声音设置里启用)。
播放mp3,同时在 Audacity 点击“录音”。
播放完后,导出为 MP3 文件。这样你就把“声音”录下来了。



2026-04-15 14:47
王咸美
Rank: 1
等 级:新手上路
帖 子:909
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!

2026-04-15 17:59
王咸美
Rank: 1
等 级:新手上路
帖 子:909
专家分:3
注 册:2018-1-4
收藏
得分:0 
可否将网易云音乐中歌曲(包括付费歌曲)或歌手的全部音乐下载下来,代码如何修改,请指点。
2026-04-15 18:16
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1150
专家分:1680
注 册:2021-10-13
收藏
得分:0 
好像是python代码
2026-04-15 19:31
快速回复:下列代码无法下载mp3音乐,请高手指点!
数据加载中...
 
   
关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019139 second(s), 9 queries.
Copyright©2004-2026, BCCN.NET, All Rights Reserved