# 🎵 Melodia
> 网易云音乐下载工具
[](https://badge.fury.io/py/pymelodia)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
## 🚀 快速开始
### 安装
```bash
pip install pymelodia
```
### 基本使用
```bash
# 下载单首歌曲
melodia download song 390345
# 下载歌单
melodia download playlist 123456
# 下载指定分类的音乐
melodia download category 华语
# 下载所有分类
melodia download all
# 获取下载链接
melodia get link 390345
# 清理重复文件
melodia clean /path/to/music
```
## 📖 详细使用
### 下载命令
```bash
# 单曲下载
melodia download song 390345
# 批量下载多首歌曲
melodia download song "['390345', '123456', '789012']"
# 歌单下载
melodia download playlist 2829883282
# 批量下载多个歌单
melodia download playlist "['2829883282', '3779629']"
# 分类下载(支持华语、欧美、日语等)
melodia download category 华语
# 下载所有支持的分类
melodia download all
```
### 配置选项
```bash
# 设置保存路径
melodia --save-path /path/to/music download song 390345
# 设置请求延时(避免频率限制)
melodia --delay 1 download category 华语
# 设置最大页数
melodia --max-pages 50 download all
# 设置用户Cookie(提升成功率)
melodia --cookie "your_cookie_here" download playlist 123456
# 启用多线程下载(默认开启,4个线程)
melodia --threading --thread-count 8 download playlist 123456
# 禁用多线程下载(单线程模式)
melodia --no-threading download playlist 123456
# 设置临时文件目录
melodia --temp-dir /tmp/melodia download category 华语
```
### 支持的音乐分类
**语言分类**:华语、欧美、日语、韩语、粤语
**风格分类**:流行、摇滚、民谣、电子、舞曲、说唱、轻音乐、爵士、乡村
**场景分类**:清晨、夜晚、学习、工作、午休、下午茶、地铁、驾车
**情感分类**:怀旧、清新、浪漫、伤感、治愈、放松、孤独、感动
**主题分类**:综艺、影视原声、ACG、儿童、校园、游戏、经典
## 🎯 界面预览
```
🎵 Melodia 🎵
════════════════════════════════════════════════════════════════
批量下载(12首) [████████████░░░░░░░░░░] 60.0% (7/12)
线程状态 [██████████████████░░] 90.0% (9/10)
歌单列表 [████████████████████] 100.0% (8/8)
📝 实时日志
────────────────────────────────────────────────────────────────
[14:32:15] [INFO] ℹ️ 启用多线程下载,线程数: 4
[14:32:15] [INFO] ℹ️ 开始下载歌曲 ID: 390345
[14:32:16] [SUCCESS] ✅ [线程-1] 成功下载: 周杰伦 - 晴天
[14:32:16] [SUCCESS] ✅ [线程-2] 成功下载: 林俊杰 - 江南
[14:32:17] [INFO] ℹ️ 正在处理歌单...
```
## ⚙️ 高级配置
### 配置文件
程序会在用户目录下创建配置文件 `~/.melodia/config.json`:
```json
{
"save_path": "./music/",
"delay": 0,
"max_pages": 20,
"cookie": "",
"music_class": "全部",
"temp_path": "./temp.mp3",
"temp_dir": "./temp/",
"hashed_storage_enabled": false,
"hashed_storage_digit": 30,
"threading_enabled": true,
"thread_count": 4
}
```
### 环境变量
```bash
export MD_SAVE_PATH=./music/
export MD_TEMP_PATH=./temp.mp3
export MD_TEMP_DIR=./temp/
export MD_CLASS=华语
export MD_DELAY=0
export MD_COOKIE=""
export MD_MAX_PAGES=20
export MD_HASHED_STORAGE=false
export MD_HASHED_STORAGE_DIGIT=30
export MD_THREADING_ENABLED=true
export MD_THREAD_COUNT=4
```
### 配置管理命令
```bash
# 显示当前配置信息
melodia config show
melodia get config
# 保存配置到文件
melodia config save --hashed-storage --hashed-storage-digit 30
# 保存多线程配置
melodia config save --threading --thread-count 8 --temp-dir ./temp/
# 禁用多线程并保存
melodia config save --no-threading
```
### 参数优先级
命令行参数 > 环境变量 > 配置文件 > 默认值
## 🛠️ 开发
### 本地开发
```bash
git clone https://github.com/yht0511/MusicSpider.git
cd MusicSpider
pip install -e .
```
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## ⚠️ 免责声明
本工具仅供学习和研究使用,请勿用于商业用途。下载的音乐文件请在24小时内删除,如需长期使用请购买正版音乐。
Raw data
{
"_id": null,
"home_page": "https://github.com/yht0511/melodia",
"name": "pymelodia",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "music, download, netease, \u7f51\u6613\u4e91, \u97f3\u4e50\u4e0b\u8f7d, \u547d\u4ee4\u884c\u5de5\u5177",
"author": "yht0511",
"author_email": "yht0511 <admin@teclab.org.cn>",
"download_url": "https://files.pythonhosted.org/packages/3f/e2/6349ce9e58ea6d73f0bfcafd31e48d7ccd8d29882dc325b5a8d25635ee49/pymelodia-1.1.1.tar.gz",
"platform": null,
"description": "# \ud83c\udfb5 Melodia\r\n\r\n> \u7f51\u6613\u4e91\u97f3\u4e50\u4e0b\u8f7d\u5de5\u5177\r\n\r\n[](https://badge.fury.io/py/pymelodia)\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/MIT)\r\n\r\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\r\n\r\n### \u5b89\u88c5\r\n\r\n```bash\r\npip install pymelodia\r\n```\r\n\r\n### \u57fa\u672c\u4f7f\u7528\r\n\r\n```bash\r\n# \u4e0b\u8f7d\u5355\u9996\u6b4c\u66f2\r\nmelodia download song 390345\r\n\r\n# \u4e0b\u8f7d\u6b4c\u5355\r\nmelodia download playlist 123456\r\n\r\n# \u4e0b\u8f7d\u6307\u5b9a\u5206\u7c7b\u7684\u97f3\u4e50\r\nmelodia download category \u534e\u8bed\r\n\r\n# \u4e0b\u8f7d\u6240\u6709\u5206\u7c7b\r\nmelodia download all\r\n\r\n# \u83b7\u53d6\u4e0b\u8f7d\u94fe\u63a5\r\nmelodia get link 390345\r\n\r\n# \u6e05\u7406\u91cd\u590d\u6587\u4ef6\r\nmelodia clean /path/to/music\r\n```\r\n\r\n## \ud83d\udcd6 \u8be6\u7ec6\u4f7f\u7528\r\n\r\n### \u4e0b\u8f7d\u547d\u4ee4\r\n\r\n```bash\r\n# \u5355\u66f2\u4e0b\u8f7d\r\nmelodia download song 390345\r\n\r\n# \u6279\u91cf\u4e0b\u8f7d\u591a\u9996\u6b4c\u66f2\r\nmelodia download song \"['390345', '123456', '789012']\"\r\n\r\n# \u6b4c\u5355\u4e0b\u8f7d\r\nmelodia download playlist 2829883282\r\n\r\n# \u6279\u91cf\u4e0b\u8f7d\u591a\u4e2a\u6b4c\u5355\r\nmelodia download playlist \"['2829883282', '3779629']\"\r\n\r\n# \u5206\u7c7b\u4e0b\u8f7d\uff08\u652f\u6301\u534e\u8bed\u3001\u6b27\u7f8e\u3001\u65e5\u8bed\u7b49\uff09\r\nmelodia download category \u534e\u8bed\r\n\r\n# \u4e0b\u8f7d\u6240\u6709\u652f\u6301\u7684\u5206\u7c7b\r\nmelodia download all\r\n```\r\n\r\n### \u914d\u7f6e\u9009\u9879\r\n\r\n```bash\r\n# \u8bbe\u7f6e\u4fdd\u5b58\u8def\u5f84\r\nmelodia --save-path /path/to/music download song 390345\r\n\r\n# \u8bbe\u7f6e\u8bf7\u6c42\u5ef6\u65f6\uff08\u907f\u514d\u9891\u7387\u9650\u5236\uff09\r\nmelodia --delay 1 download category \u534e\u8bed\r\n\r\n# \u8bbe\u7f6e\u6700\u5927\u9875\u6570\r\nmelodia --max-pages 50 download all\r\n\r\n# \u8bbe\u7f6e\u7528\u6237Cookie\uff08\u63d0\u5347\u6210\u529f\u7387\uff09\r\nmelodia --cookie \"your_cookie_here\" download playlist 123456\r\n\r\n# \u542f\u7528\u591a\u7ebf\u7a0b\u4e0b\u8f7d\uff08\u9ed8\u8ba4\u5f00\u542f\uff0c4\u4e2a\u7ebf\u7a0b\uff09\r\nmelodia --threading --thread-count 8 download playlist 123456\r\n\r\n# \u7981\u7528\u591a\u7ebf\u7a0b\u4e0b\u8f7d\uff08\u5355\u7ebf\u7a0b\u6a21\u5f0f\uff09\r\nmelodia --no-threading download playlist 123456\r\n\r\n# \u8bbe\u7f6e\u4e34\u65f6\u6587\u4ef6\u76ee\u5f55\r\nmelodia --temp-dir /tmp/melodia download category \u534e\u8bed\r\n```\r\n\r\n### \u652f\u6301\u7684\u97f3\u4e50\u5206\u7c7b\r\n\r\n**\u8bed\u8a00\u5206\u7c7b**\uff1a\u534e\u8bed\u3001\u6b27\u7f8e\u3001\u65e5\u8bed\u3001\u97e9\u8bed\u3001\u7ca4\u8bed\r\n\r\n**\u98ce\u683c\u5206\u7c7b**\uff1a\u6d41\u884c\u3001\u6447\u6eda\u3001\u6c11\u8c23\u3001\u7535\u5b50\u3001\u821e\u66f2\u3001\u8bf4\u5531\u3001\u8f7b\u97f3\u4e50\u3001\u7235\u58eb\u3001\u4e61\u6751\r\n\r\n**\u573a\u666f\u5206\u7c7b**\uff1a\u6e05\u6668\u3001\u591c\u665a\u3001\u5b66\u4e60\u3001\u5de5\u4f5c\u3001\u5348\u4f11\u3001\u4e0b\u5348\u8336\u3001\u5730\u94c1\u3001\u9a7e\u8f66\r\n\r\n**\u60c5\u611f\u5206\u7c7b**\uff1a\u6000\u65e7\u3001\u6e05\u65b0\u3001\u6d6a\u6f2b\u3001\u4f24\u611f\u3001\u6cbb\u6108\u3001\u653e\u677e\u3001\u5b64\u72ec\u3001\u611f\u52a8\r\n\r\n**\u4e3b\u9898\u5206\u7c7b**\uff1a\u7efc\u827a\u3001\u5f71\u89c6\u539f\u58f0\u3001ACG\u3001\u513f\u7ae5\u3001\u6821\u56ed\u3001\u6e38\u620f\u3001\u7ecf\u5178\r\n\r\n## \ud83c\udfaf \u754c\u9762\u9884\u89c8\r\n\r\n```\r\n\ud83c\udfb5 Melodia \ud83c\udfb5\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n\r\n\u6279\u91cf\u4e0b\u8f7d(12\u9996) [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 60.0% (7/12)\r\n\u7ebf\u7a0b\u72b6\u6001 [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591] 90.0% (9/10)\r\n\u6b4c\u5355\u5217\u8868 [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588] 100.0% (8/8)\r\n\r\n\ud83d\udcdd \u5b9e\u65f6\u65e5\u5fd7\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n[14:32:15] [INFO] \u2139\ufe0f \u542f\u7528\u591a\u7ebf\u7a0b\u4e0b\u8f7d\uff0c\u7ebf\u7a0b\u6570: 4\r\n[14:32:15] [INFO] \u2139\ufe0f \u5f00\u59cb\u4e0b\u8f7d\u6b4c\u66f2 ID: 390345\r\n[14:32:16] [SUCCESS] \u2705 [\u7ebf\u7a0b-1] \u6210\u529f\u4e0b\u8f7d: \u5468\u6770\u4f26 - \u6674\u5929\r\n[14:32:16] [SUCCESS] \u2705 [\u7ebf\u7a0b-2] \u6210\u529f\u4e0b\u8f7d: \u6797\u4fca\u6770 - \u6c5f\u5357\r\n[14:32:17] [INFO] \u2139\ufe0f \u6b63\u5728\u5904\u7406\u6b4c\u5355...\r\n```\r\n\r\n## \u2699\ufe0f \u9ad8\u7ea7\u914d\u7f6e\r\n\r\n### \u914d\u7f6e\u6587\u4ef6\r\n\r\n\u7a0b\u5e8f\u4f1a\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u521b\u5efa\u914d\u7f6e\u6587\u4ef6 `~/.melodia/config.json`\uff1a\r\n\r\n```json\r\n{\r\n \"save_path\": \"./music/\",\r\n \"delay\": 0,\r\n \"max_pages\": 20,\r\n \"cookie\": \"\",\r\n \"music_class\": \"\u5168\u90e8\",\r\n \"temp_path\": \"./temp.mp3\",\r\n \"temp_dir\": \"./temp/\",\r\n \"hashed_storage_enabled\": false,\r\n \"hashed_storage_digit\": 30,\r\n \"threading_enabled\": true,\r\n \"thread_count\": 4\r\n}\r\n```\r\n\r\n### \u73af\u5883\u53d8\u91cf\r\n\r\n```bash\r\nexport MD_SAVE_PATH=./music/\r\nexport MD_TEMP_PATH=./temp.mp3\r\nexport MD_TEMP_DIR=./temp/\r\nexport MD_CLASS=\u534e\u8bed\r\nexport MD_DELAY=0\r\nexport MD_COOKIE=\"\"\r\nexport MD_MAX_PAGES=20\r\nexport MD_HASHED_STORAGE=false\r\nexport MD_HASHED_STORAGE_DIGIT=30\r\nexport MD_THREADING_ENABLED=true\r\nexport MD_THREAD_COUNT=4\r\n```\r\n\r\n### \u914d\u7f6e\u7ba1\u7406\u547d\u4ee4\r\n\r\n```bash\r\n# \u663e\u793a\u5f53\u524d\u914d\u7f6e\u4fe1\u606f\r\nmelodia config show\r\nmelodia get config\r\n\r\n# \u4fdd\u5b58\u914d\u7f6e\u5230\u6587\u4ef6\r\nmelodia config save --hashed-storage --hashed-storage-digit 30\r\n\r\n# \u4fdd\u5b58\u591a\u7ebf\u7a0b\u914d\u7f6e\r\nmelodia config save --threading --thread-count 8 --temp-dir ./temp/\r\n\r\n# \u7981\u7528\u591a\u7ebf\u7a0b\u5e76\u4fdd\u5b58\r\nmelodia config save --no-threading\r\n```\r\n\r\n### \u53c2\u6570\u4f18\u5148\u7ea7\r\n\r\n\u547d\u4ee4\u884c\u53c2\u6570 > \u73af\u5883\u53d8\u91cf > \u914d\u7f6e\u6587\u4ef6 > \u9ed8\u8ba4\u503c\r\n\r\n## \ud83d\udee0\ufe0f \u5f00\u53d1\r\n\r\n### \u672c\u5730\u5f00\u53d1\r\n\r\n```bash\r\ngit clone https://github.com/yht0511/MusicSpider.git\r\ncd MusicSpider\r\npip install -e .\r\n```\r\n\r\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u67e5\u770b [LICENSE](LICENSE) \u6587\u4ef6\u4e86\u89e3\u8be6\u60c5\u3002\r\n\r\n## \u26a0\ufe0f \u514d\u8d23\u58f0\u660e\r\n\r\n\u672c\u5de5\u5177\u4ec5\u4f9b\u5b66\u4e60\u548c\u7814\u7a76\u4f7f\u7528\uff0c\u8bf7\u52ff\u7528\u4e8e\u5546\u4e1a\u7528\u9014\u3002\u4e0b\u8f7d\u7684\u97f3\u4e50\u6587\u4ef6\u8bf7\u572824\u5c0f\u65f6\u5185\u5220\u9664\uff0c\u5982\u9700\u957f\u671f\u4f7f\u7528\u8bf7\u8d2d\u4e70\u6b63\u7248\u97f3\u4e50\u3002\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\ud83c\udfb5 \u7f51\u6613\u4e91\u97f3\u4e50\u4e0b\u8f7d\u5de5\u5177",
"version": "1.1.1",
"project_urls": {
"Bug Reports": "https://github.com/yht0511/melodia/issues",
"Documentation": "https://github.com/yht0511/melodia/blob/main/README.md",
"Homepage": "https://github.com/yht0511/melodia",
"Source": "https://github.com/yht0511/melodia"
},
"split_keywords": [
"music",
" download",
" netease",
" \u7f51\u6613\u4e91",
" \u97f3\u4e50\u4e0b\u8f7d",
" \u547d\u4ee4\u884c\u5de5\u5177"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2518e1976008ac7ae469cfc1bf69b7a7a8d7c360d3d06f60be103988a9d0ec87",
"md5": "f98f63f26c61dfeff66e4c3dce3d9478",
"sha256": "3832e3ed510919904265abd1d899f5060f7da916e0bf363e520c872bdda03318"
},
"downloads": -1,
"filename": "pymelodia-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f98f63f26c61dfeff66e4c3dce3d9478",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 37750,
"upload_time": "2025-08-02T07:45:07",
"upload_time_iso_8601": "2025-08-02T07:45:07.542924Z",
"url": "https://files.pythonhosted.org/packages/25/18/e1976008ac7ae469cfc1bf69b7a7a8d7c360d3d06f60be103988a9d0ec87/pymelodia-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3fe26349ce9e58ea6d73f0bfcafd31e48d7ccd8d29882dc325b5a8d25635ee49",
"md5": "424077c1517f0729991cd751a78defe3",
"sha256": "2ee9cdc87782169f063af1b4c464e822938dbe206bc4e61165af94aff396006c"
},
"downloads": -1,
"filename": "pymelodia-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "424077c1517f0729991cd751a78defe3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 33953,
"upload_time": "2025-08-02T07:45:08",
"upload_time_iso_8601": "2025-08-02T07:45:08.876130Z",
"url": "https://files.pythonhosted.org/packages/3f/e2/6349ce9e58ea6d73f0bfcafd31e48d7ccd8d29882dc325b5a8d25635ee49/pymelodia-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-02 07:45:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yht0511",
"github_project": "melodia",
"github_not_found": true,
"lcname": "pymelodia"
}