|
下面是一个使用PyQt5和requests实现的简易音乐下载器示例代码。该程序通过搜索API获取音乐列表,双击列表项即可下载音乐文件:
- import sys
- import os
- import requests
- from PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit,
- QListWidget, QVBoxLayout, QMessageBox)
- class MusicDownloader(QWidget):
- def __init__(self):
- super().__init__()
- self.initUI()
-
- def initUI(self):
- self.setWindowTitle('简易音乐下载器')
- self.setGeometry(300, 300, 500, 400)
-
- # 创建搜索框
- self.search_input = QLineEdit(self)
- self.search_input.setPlaceholderText("输入歌曲名按回车搜索...")
- self.search_input.returnPressed.connect(self.search_music)
-
- # 创建结果列表
- self.result_list = QListWidget(self)
- self.result_list.itemDoubleClicked.connect(self.download_music)
-
- # 布局
- layout = QVBoxLayout()
- layout.addWidget(self.search_input)
- layout.addWidget(self.result_list)
- self.setLayout(layout)
-
- def search_music(self):
- """搜索音乐并显示结果"""
- keyword = self.search_input.text().strip()
- if not keyword:
- return
-
- self.result_list.clear()
-
- try:
- # 实际项目中替换为真实的搜索API
- # 这里使用模拟数据演示
- mock_data = [
- {"name": f"{keyword} - 歌手A", "url": "[url=http://example.com/song1.mp3"},]http://example.com/song1.mp3"},[/url]
- {"name": f"{keyword} - 歌手B", "url": "[url=http://example.com/song2.mp3"}]http://example.com/song2.mp3"}[/url]
- ]
-
- for song in mock_data:
- self.result_list.addItem(song["name"])
- self.result_list.item(self.result_list.count()-1).setData(32, song["url"])
-
- except Exception as e:
- QMessageBox.warning(self, "错误", f"搜索失败: {str(e)}")
-
- def download_music(self, item):
- """下载选中的音乐"""
- try:
- url = item.data(32) # 获取存储的URL
- song_name = item.text().replace(" ", "_").replace("/", "") + ".mp3"
-
- # 创建下载目录
- os.makedirs("downloads", exist_ok=True)
- save_path = os.path.join("downloads", song_name)
-
- # 下载音乐文件
- response = requests.get(url, stream=True, timeout=30)
- with open(save_path, 'wb') as f:
- for chunk in response.iter_content(chunk_size=1024):
- if chunk:
- f.write(chunk)
-
- QMessageBox.information(self, "成功", f"已保存到: {save_path}")
-
- except Exception as e:
- QMessageBox.critical(self, "下载失败", f"错误信息: {str(e)}")
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- ex = MusicDownloader()
- ex.show()
- sys.exit(app.exec_())
复制代码
### 使用说明:
1. 在搜索框输入歌曲名,按回车进行搜索
2. 双击列表中的歌曲项开始下载
3. 下载的音乐文件会保存在程序所在目录的 downloads 文件夹
### 注意事项:
1. 需要安装依赖库:
pip install PyQt5 requests
2. 实际使用时需要:
- 替换代码中的模拟数据为真实音乐API
- 处理可能的反爬机制(如Headers、Cookies)
- 添加下载进度显示(可通过PyQt5的QProgressBar实现)
### 重要提示:
- 请确保遵守相关网站的使用条款
- 仅下载拥有合法授权的音乐内容
- 本示例仅用于技术学习目的
如果需要实现更完整的功能(如下载进度显示、多线程下载等),可以在基础代码上进行扩展。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|