mxget
$ pip3 install -U mxget
mxget
要求Python版本不低于3.5.3
。
mxget
开发的初衷只是免去你须要频繁在各大网站切换听歌的烦恼,而不是为了破解音乐平台的数字版权限制。它无法下载受版权保护的数字音乐,音频也仅提供标准音质(128kbps)下载。如果你喜欢高音质/无损资源,请支持正版。
任何组织/个人不得将本项目用于商业或者其它非法用途,因此造成的责任和风险由使用者自行承担!
音乐平台 | 平台标识 | 专用识别码 |
---|---|---|
网易云音乐 | netease / nc | 1000 |
QQ音乐 | tencent / qq | 1001 |
咪咕音乐 | migu / mg | 1002 |
酷狗音乐 | kugou / kg | 1003 |
酷我音乐 | kuwo / kw | 1004 |
虾米音乐 | xiami / xm | 1005 |
千千音乐 | qianqian / baidu / bd | 1006 |
go get -u github.com/winterssy/mxget
本项目不提供可执行程序下载,如须开箱即用,可选择 pymxget 。
这是 mxget
的基础功能,你可以通过终端调用 mxget
实现音乐搜索、下载功能。以网易云音乐为例,
$ mxget search --from nc -k Faded
如果你的搜索关键词包含空格,请用双引号
""
包围起来。
$ mxget song --from nc --id 36990266
$ mxget album --from nc --id 3406843
$ mxget playlist --from nc --id 156934569
$ mxget artist --from nc --id 1045123
如果你希望 mxget
为你自动更新音乐标签,可使用 --tag
指令,如:
$ mxget song --from nc --id 36990266 --tag
当使用 --tag
指令时,mxget
会同时将歌词内嵌到音乐文件中,一般而言你无须再额外下载歌词。如果你确实需要 .lrc
格式的歌词文件,可使用 --lyric
指令,如:
$ mxget song --from nc --id 36990266 --lyric
默认情况下,mxget
会下载音乐到当前目录下的 downloads
文件夹,如果你想要更改此行为,可以这样做:
$ mxget config --cwd [directory]
directory
必须为绝对路径。
mxget
默认使用的音乐平台为网易云音乐,你可以通过以下命令更改:
$ mxget config --from qq
这样,如果你不通过 --from
指令指定音乐平台,mxget
便会使用默认值。
在上述命令中,你会经常用到 --from
以及 --id
这两个指令,它们分别表示音乐平台标识和音乐id。
音乐id为音乐平台为对应资源分配的唯一id,当使用
mxget
进行搜索时,歌曲id会显示在每条结果的后面。你也可以通过各大音乐平台的网页版在线搜索相关资源,然后从结果详情页的URL中获取其音乐id。值得注意的是,酷狗音乐对应的歌曲id即为文件哈希hash
。
mxget
支持多任务快速并发下载,你可以通过 --limit
参数指定同时下载的任务数,如不指定默认为CPU核心数。
$ mxget playlist --from nc --id 156934569 --limit 16
尽管
mxget
允许设置的最高并发数是32,但使用时建议不要超过16,请根据网络状况适当调整。
mxget
封装了一些便捷的API,Go开发者可以直接调用,举个例子:
package main
import (
"fmt"
"github.com/winterssy/mxget/pkg/provider/netease"
)
func main() {
client := netease.New(nil)
resp, err := client.GetSong("36990266")
if err != nil {
panic(err)
}
fmt.Println(resp)
}
Tip:使用前你须对作者开发的另一款网络请求库 sreq 有所了解,更多细节请阅读 mxget
的源码。
网易云音乐API的加解密算法参考 Binaryify/NeteaseCloudMusicApi 并用Golang实现,但
mxget
并未移植原项目的所有API,如开发者需要,可fork本项目实现,很简单。
mxget
提供了简易的RESTful API,允许你基于其开发web应用。启动服务:
$ mxget serve
Docker版:
$ docker pull winterssy/mxget
$ docker run -d --name mxget -p 8080:8080 winterssy/mxget
请求方法均为 GET
,统一调用路径为 /api/{platform}/{type}/{param}
,示例:
周杰伦
的搜索结果$ curl -X GET "http://127.0.0.1:8080/api/qq/search/周杰伦" -H "accept: application/json"
36990266
的歌曲资源$ curl -X GET "http://127.0.0.1:8080/api/netease/song/36990266" -H "accept: application/json"
1121438701
的专辑资源$ curl -X GET "http://127.0.0.1:8080/api/migu/album/1121438701" -H "accept: application/json"
547134
的歌单资源$ curl -X GET "http://127.0.0.1:8080/api/kugou/playlist/547134" -H "accept: application/json"
336
的歌手资源$ curl -X GET "http://127.0.0.1:8080/api/kuwo/artist/336" -H "accept: application/json"
注: 由于音乐平台的限制,mxget
的API服务仅在本地测试通过。如果你将 mxget
部署到公网,特别是海外VPS上,开发者不保证能工作,遇到的问题需要你自行解决。
mxget
会将音乐标签、歌词等内容聚合之后才返回数据,耗时时长跟歌单歌曲数成正比。
API请求本身没有返回相应数据,原因可能是音乐平台的版权限制,这不是开发者能够解决的,请尝试更换音乐平台。
经过调研,
mxget
已明确不支持下载MV。
岁月有你 惜惜相处