第三方网易云音乐 Python API 及个人音乐库离线转储工具
注意 : 异步使用,请移步 async
分支
pip install pyncm
可选 (若不考虑使用CLI则请忽略)
mutagen
: 为下载的音乐打上封面等tqdm
: 显示实时下载进度coloredlogs
: 彩色日志输出
Windows 用户: 在 Releases 可下载已打包 .exe
版本 (x86)
positional arguments:
链接 网易云音乐分享链接
options:
-h, --help show this help message and exit
下载:
--max-workers 最多同时下载任务数, -m 最多同时下载任务数
--output-name 保存文件名模板, --template 保存文件名模板, -t 保存文件名模板
保存文件名模板
参数:
id - 网易云音乐资源 ID
year - 出版年份
no - 专辑中编号
album - 专辑标题
track - 单曲标题
title - 完整标题
artists- 艺术家名
例:
{track} - {artists} 等效于 {title}
-o 输出, --output 输出 输出文件夹
注:该参数也可使用模板,格式同 保存文件名模板
--quality 音质 音频音质(高音质需要 CVIP)
参数:
hires - Hi-Res
lossless- “无损”
exhigh - 较高
standard- 标准
-dl, --use-download-api
调用下载API,而非播放API进行下载。如此可能允许更高高音质音频的下载。
【注意】此API有额度限制,参考 https://music.163.com/member/downinfo
--no-overwrite 不重复下载已经存在的音频文件
歌词:
--lyric-no 跳过歌词 跳过某些歌词类型的下载
参数:
lrc - 源语言歌词 (合并到 .lrc)
tlyric - 翻译后歌词 (合并到 .lrc)
romalrc- 罗马音歌词 (合并到 .lrc)
yrc - 逐词滚动歌词 (保存到 .ass)
none - 下载所有歌词
例:
--lyric-no "tlyric romalrc yrc" 将只下载源语言歌词
--lyric-no none 将下载所有歌词
注:
默认不下载 *逐词滚动歌词*
登陆:
--phone 手机 网易账户手机号
--cookie Cookie (MUSIC_U)
网易云音乐 MUSIC_U Cookie (形如 '00B2471D143...')
--pwd 密码, --password 密码
网易账户密码
--save [保存到] 写本次登录信息于文件
--load [保存的登陆信息文件] 从文件读取登录信息供本次登陆使用
--http 优先使用 HTTP,不保证不被升级
--deviceId 设备ID 指定设备 ID;匿名登陆时,设备 ID 既指定对应账户
【注意】默认 ID 与当前设备无关,乃从内嵌 256 可用 ID 中随机选取;指定自定义 ID 不一定能登录,相关性暂时未知
--log-level LOG_LEVEL
日志等级
限量及过滤(注:只适用于*每单个*链接 / ID):
-n 下载总量, --count 下载总量
限制下载歌曲总量,n=0即不限制(注:过大值可能导致限流)
--sort-by 歌曲排序 【限制总量时】歌曲排序方式 (default: 默认排序 hot: 热度高(相对于其所在专辑)在前 time: 发行时间新在前)
--reverse-sort 【限制总量时】倒序排序歌曲
--user-bookmarks 【下载用户歌单时】在下载用户创建的歌单的同时,也下载其收藏的歌单
工具:
--save-m3u 保存M3U播放列表文件名
将本次下载的歌曲文件名依一定顺序保存在M3U文件中;写入的文件目录相对于该M3U文件
文件编码为 UTF-8
顺序为:链接先后优先——每个链接的所有歌曲依照歌曲排序设定 (--sort-by)排序
变量名 | 说明 |
---|---|
PYNCM_DEBUG |
调试日志输出等级,'CRITICAL', 'DEBUG', 'ERROR','FATAL','INFO','WARNING' 之一 |
API使用详见
>>> from pyncm import apis
# 获取歌曲信息
>>> apis.track.GetTrackAudio(29732235)
{'data': [{'id': 29732235, 'url': 'http://m701.music...
# 获取歌曲详情
>>> apis.track.GetTrackDetail(29732235)
{'songs': [{'name': 'Supernova', 'id': 2...
# 获取歌曲评论
>>> apis.track.GetTrackComments(29732235)
{'isMusician': False, 'userId': -1, 'topComments': [], 'moreHot': True, 'hotComments': [{'user': {'locationInfo': None, 'liveIn ...
- 多 Session 示例
LoginViaEmail(...)
# 利用全局 Session 完成该 API Call
session = CreateNewSession() # 建立新的 Session
with session: # 进入该 Session, 在 `with` 内的 API 将由该 Session 完成
LoginViaCellPhone(...)
result = GetTrackAudio(...)
# 离开 Session. 此后 API 将继续由全局 Session 管理
GetTrackComments(...)
同时,你也可以在 API Call 中 指定 Session
await GetTrackComments(..., session=session)
详见 Session 说明
大部分 API 函数已经详细注释,可读性较高。推荐参阅 API 源码 获得支持
- 为什么
GetTrackAudio
几乎拿不到音频 URL?
你需要进行登陆。若身边没有合适的账号,也可选择匿名登陆:
>>> from pyncm.apis.login import LoginViaAnonymousAccount
>>> LoginViaAnonymousAccount()
{'tick': 1662870122.1159196,
'content': {'code': 200,
'userId': 8023914528,
'createTime': 1662868134354,
'profile': {'nickname': 'Ano...