import os\nimport tkinter as tk\nimport requests\nimport tkinter.messagebox as mes_box\nfrom tkinter import ttk\nfrom retrying import retry\n\nclass SetUI(object):\n """\n 音乐弹框界面\n """\n def init(self, weight=1000, height=600):\n self.ui_height = height\n self.ui_weight = weight\n self.title = "好课优选·音乐破解软件"\n self.ui_root = tk.Tk(className=self.title)\n self.ui_url = tk.StringVar()\n self.ui_var = tk.IntVar()\n self.ui_var.set(1)\n self.show_result = None\n self.song_num = None\n self.response_data = None\n self.song_url = None\n self.song_name = None\n self.song_author = None\n\n def set_ui(self):\n """\n 设置简易UI界面\n :return:\n """\n # Frame空间\n frame_1 = tk.Frame(self.ui_root)\n frame_2 = tk.Frame(self.ui_root)\n frame_3 = tk.Frame(self.ui_root)\n frame_4 = tk.Frame(self.ui_root)\n\n # ui界面中菜单设计\n ui_menu = tk.Menu(self.ui_root)\n self.ui_root.config(menu=ui_menu)\n file_menu = tk.Menu(ui_menu, tearoff=0)\n ui_menu.add_cascade(label='菜单', menu=file_menu)\n # file_menu.add_command(label='使用说明', command=lambda: webbrowser.open('www.baidu.com'))\n # file_menu.add_command(label='关于作者', command=lambda: webbrowser.open('www.baidu.com'))\n file_menu.add_command(label='退出', command=self.ui_root.quit)\n\n # 控件内容设置\n choice_passageway = tk.Label(frame_1, text='请选择音乐搜索通道:', padx=10, pady=10)\n\n input_link = tk.Label(frame_2, text="请输入歌曲名或歌手:")\n entry_style = tk.Entry(frame_2, textvariable=self.ui_url, highlightcolor='Fuchsia', highlightthickness=1,\n width=35)\n label2 = tk.Label(frame_2, text=" ")\n play_button = tk.Button(frame_2, text="搜索", font=('楷体', 11), fg='Purple', width=2, height=1,\n command=self.get_KuWoMusic)\n label3 = tk.Label(frame_2, text=" ")\n # 表格样式\n columns = ("序号", "歌手", "歌曲", "专辑")\n self.show_result = ttk.Treeview(frame_3, height=20, show="headings", columns=columns)\n # 下载\n download_button = tk.Button(frame_4, text="下载", font=('楷体', 11), fg='Purple', width=6, height=1, padx=5,\n pady=5, command=self.download_music)\n # 控件布局\n frame_1.pack()\n frame_2.pack()\n frame_3.pack()\n frame_4.pack()\n choice_passageway.grid(row=0, column=0)\n # passageway_button_1.grid(row=0, column=1)\n # passageway_button_2.grid(row=0, column=2)\n # passageway_button_3.grid(row=0, column=3)\n # passageway_button_4.grid(row=0, column=4)\n input_link.grid(row=0, column=0)\n entry_style.grid(row=0, column=1)\n label2.grid(row=0, column=2)\n play_button.grid(row=0, column=3, ipadx=10, ipady=10)\n label3.grid(row=0, column=4)\n self.show_result.grid(row=0, column=4)\n download_button.grid(row=0, column=5)\n\n # 设置表头\n self.show_result.heading("序号", text="序号")\n self.show_result.heading("歌手", text="歌手")\n self.show_result.heading("歌曲", text="歌曲")\n self.show_result.heading("专辑", text="专辑")\n # 设置列\n self.show_result.column("序号", width=100, anchor='center')\n self.show_result.column("歌手", width=200, anchor='center')\n self.show_result.column("歌曲", width=200, anchor='center')\n self.show_result.column("专辑", width=300, anchor='center')\n\n # 鼠标点击\n self.show_result.bind('', self.get_song_url)\n\n @retry(stop_max_attempt_number=5)\n def get_KuWoMusic(self):\n """\n 获取酷我音乐\n :return:\n """\n # 清空treeview表格数据\n for item in self.show_result.get_children():\n self.show_result.delete(item)\n headers = { # 克隆刚才的那个浏览器的所有设置和信息\n 'Accept': 'application/json, text/plain, /',\n 'Accept-Encoding': 'gzip, deflate',\n 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n 'Cache-Control': 'no-cache',\n 'Connection': 'keep-alive',\n 'Cookie': '_ga=GA1.2.318894382.1685020805; kw_token=5RNFYHBN9YL; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1687260983,1687262902,1687696703,1688533138; _gid=GA1.2.455828205.1688533138; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1688535753; _ga_ETPBRPM9ML=GS1.2.1688533138.4.1.1688535792.5.0.0; Hm_token=SRzsfajTBBf68APWhSNaYfiFQKAciwpm',\n 'Cross': '82117c3a7e3cbbef4cd7452b37d679a4',\n 'Host': 'www.kuwo.cn',\n 'Pragma': 'no-cache',\n 'Referer': 'http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6%E5%85%A8%E9%83%A8%E6%AD%8C%E6%9B%B2',\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67'\n }\n search_input = self.ui_url.get()\n if len(search_input) > 0:\n search_url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?'\n search_data = {\n 'key': search_input,\n 'pn': '1',\n 'rn': '80',\n 'httpsStatus': '1',\n 'reqId': '858597c1-b18e-11ec-83e4-9d53d2ff08ff',\n 'plat': 'web_www',\n 'from': ''\n }\n try:\n self.response_data = requests.get(search_url, params=search_data, headers=headers, timeout=20).json()\n songs_data = self.response_data['data']['list']\n if int(self.response_data['data']['total']) <= 0:\n mes_box.showerror(title='错误', message='搜索: {} 不存在.'.format(search_input))\n else:\n for i in range(len(songs_data)):\n self.show_result.insert('', i, values=(i + 1, songs_data[i]['artist'], songs_data[i]['name'],\n songs_data[i]['album']))\n except TimeoutError:\n mes_box.showerror(title='错误', message='搜索超时,请重新输入后再搜索!')\n else:\n mes_box.showerror(title='错误', message='未输入需查询的歌曲或歌手,请输入后搜索!')\n\n def get_song_url(self, event):\n """\n 获取下载歌曲的地址\n :return:\n """\n # treeview中的左键单击\n for item in self.show_result.selection():\n item_text = self.show_result.item(item, "values")\n # 获取\n self.song_num = int(item_text[0])\n # 获取下载歌曲的地址\n if self.song_num is not None:\n songs_data = self.response_data['data']['list']\n songs_req_id = self.response_data['reqId']\n song_rid = songs_data[self.song_num - 1]['rid']\n music_url = 'http://www.kuwo.cn/api/v1/www/music/playUrl?mid={}&type=convert_url3' \n '&httpsStatus=1&reqId={}' \n .format(song_rid, songs_req_id)\n response_data = requests.get(music_url).json()\n self.song_url = response_data['data'].get('url')\n self.song_name = songs_data[self.song_num - 1]['name']\n self.song_author = songs_data[self.song_num - 1]['artist']\n else:\n mes_box.showerror(title='错误', message='未选择要下载的歌曲,请选择')\n\n def download_music(self):\n """\n 下载音乐\n :return:\n """\n if not os.path.exists('./KuWoMusic'):\n os.mkdir("./KuWoMusic/")\n if self.song_num is not None:\n song_name = self.song_name + '--' + self.song_author + ".mp3"\n try:\n save_path = os.path.join('./KuWoMusic/{}'.format(song_name)) \n .replace('', '/')\n true_path = os.path.abspath(save_path)\n resp = requests.get(self.song_url)\n with open(save_path, 'wb') as file:\n file.write(resp.content)\n mes_box.showinfo(title='下载成功', message='歌曲:%s,保存地址为%s' % (self.song_name, true_path))\n except Exception:\n mes_box.showerror(title='错误', message='未找到存放歌曲的文件夹')\n else:\n mes_box.showerror(title='错误', message='未选择要下载的歌曲,请选择后下载')\n\n def progress_bar(self, file_size):\n """\n 任务加载进度条\n :return:\n """\n layout = [[sg.Text('任务完成进度')],\n [sg.ProgressBar(file_size, orientation='h', size=(40, 20), key='progressbar')],\n [sg.Cancel()]]\n\n # window只需将自定义的布局加载出来即可 第一个参数是窗口标题。\n window = sg.Window('机器人执行进度', layout)\n # 根据key值获取到进度条\n _progress_bar = window['progressbar']\n for i in range(file_size): # 循环\n event, values = window.read(timeout=10)\n if event == 'Cancel' or event is None:\n break\n _progress_bar.UpdateBar(i + 1)\n\n def ui_center(self):\n """\n UI界面窗口设置:居中\n """\n ws = self.ui_root.winfo_screenwidth()\n hs = self.ui_root.winfo_screenheight()\n x = int((ws / 2) - (self.ui_weight / 2))\n y = int((hs / 2) - (self.ui_height / 2))\n self.ui_root.geometry('{}x{}+{}+{}'.format(self.ui_weight, self.ui_height, x, y))\n\n def loop(self):\n """\n 函数说明:loop等待用户事件\n """\n self.ui_root.resizable(False, False) # 禁止修改窗口大小\n self.ui_center() # 窗口居中\n self.set_ui()\n self.ui_root.mainloop()\n\nif name == 'main':\n a = SetUI()\n a.loop()\n

酷我音乐下载器:一键搜索下载MP3 - 好课优选

原文地址: http://www.cveoy.top/t/topic/pMnw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录