Code Monkey home page Code Monkey logo

pyncm's Introduction

Logo

PyNCM

第三方网易云音乐 Python API 及个人音乐库离线转储工具

注意 : 异步使用,请移步 async 分支

安装

pip install pyncm

可选 (若不考虑使用CLI则请忽略)

  • mutagen : 为下载的音乐打上封面等
  • tqdm : 显示实时下载进度
  • coloredlogs : 彩色日志输出

Windows 用户: 在 Releases 可下载已打包 .exe 版本

命令行使用

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 手机            网易账户手机号
--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' 之一

使用示例

转储单曲

asciicast

API使用详见

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 函数已经详细注释,可读性较高。推荐参阅 API 源码 获得支持

FAQ

  • 为什么 GetTrackAudio 几乎拿不到音频 URL?

你需要进行登陆。若身边没有合适的账号,也可选择匿名登陆:

>>> from pyncm.apis.login import LoginViaAnonymousAccount
>>> LoginViaAnonymousAccount()
{'tick': 1662870122.1159196,
 'content': {'code': 200,
  'userId': 8023914528,
  'createTime': 1662868134354,
  'profile': {'nickname': 'Ano...

感谢

Android逆向——网易云音乐排行榜api(上)

Binaryify/NeteaseCloudMusicApi

pyncm's People

Contributors

adrzhou avatar asdmild avatar mos9527 avatar sakarie9 avatar sinofine avatar ztg0421 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pyncm's Issues

更多的类型注释

  • 现在如果downstream用户使用pyncm,pyright会在大部分被decorator包裹的函数调用处报错。因为pyright没办法推导出返回的类型。
  • async branch中的大部分函数都应该被标记成async。

如果欢迎PR我可以帮忙看一下。

登陆失败,提示当前登录存在安全风险,请稍后再试

root@DS220plus:/volume1/music/download-test# pyncm --phone xxx --pwd xxx --save /volume1/music/download-test/.pyncm --deviceId 120
Traceback (most recent call last):
File "/bin/pyncm", line 8, in
sys.exit(main())
File "/usr/lib/python3.8/site-packages/pyncm/main.py", line 677, in main
login.LoginViaCellphone(args.phone, args.pwd)
File "/usr/lib/python3.8/site-packages/pyncm/apis/login.py", line 152, in LoginViaCellphone
WriteLoginInfo(login_status)
File "/usr/lib/python3.8/site-packages/pyncm/apis/login.py", line 29, in WriteLoginInfo
raise LoginFailedException(sess.login_info["content"])
pyncm.apis.LoginFailedException: {'loginType': 1, 'code': 10004, 'message': '当前登录存在安全风险,请稍后再试', 'redirectUrl': 'https://st.music.163.com/st/user-new/phoneReuse/index.html?scene=-1&userId=1555728631&failCode=10003&systemOs=pc&ts=1700553055858&NMSCVT=-2011112894'}

[问题] AAC格式的歌曲例子

看到/eapi/song/enhance/player/url的封装函数中默认使用的格式是aac,然而我抓了一些歌没有发现使用MP3以外的格式的例子。
可以给出一些使用MP3以外格式的例子吗?

pyncm-async 不支持 with session语法

image

<pyncm_async.Session object at 0x0000020E1EC62C90> File "C:\Users\PycharmProjects\test\main.py", line 9, in search with session: TypeError: 'Session' object does not support the context manager protocol
但是如果用同步的pyncm就没有这个问题。
是否对于多session,异步和同步的使用方法不一样?

[FR] 支持下载一个用户的所有歌单

如题。希望增加一个选项,根据保存的登陆信息读取创建的所有歌单,然后自动同步到本地(类似rsync)。

并且希望支持提供--delete 选项(自动删除本地不在歌单里的歌曲)

下载歌曲时报错 失败

  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\__main__.py", line 309, in <module>
    sys.exit(__main__())
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\__main__.py", line 290, in __main__
    total_queued = subroutine(ids) # Enqueue tasks
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\__main__.py", line 211, in __call__
    return self.forIds(ids)
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\__main__.py", line 165, in forIds
    dAudios   = track.GetTrackAudio(ids,bitrate=BITRATES[self.args.quality])['data']
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\apis\__init__.py", line 36, in wrapper
    rsp = requestFunc(url,plain,method)
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\apis\__init__.py", line 66, in wrapper
    payload = func(*a,**k)
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pyncm\apis\__init__.py", line 108, in EapiCryptoRequest
    **GetCurrentSession().cookies,
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\requests\cookies.py", line 328, in __getitem__
    return self._find_no_duplicates(name)
  File "C:\Users\kulujun\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\requests\cookies.py", line 394, in _find_no_duplicates
    raise CookieConflictError('There are multiple cookies with name, %r' % (name))
requests.cookies.CookieConflictError: There are multiple cookies with name, 'MUSIC_A_T'

下载时报错
1.6.3.10与1.6.3.9都有该问题

对文件名和文件名中的非法字符要过滤

使用DownloadAllTracksInPlaylistAndMerge下载歌曲
TrackHelper类中的Title
有些歌曲的歌手表长度超过了250个字符,有些包含非法字符,如‘?’等等
这些需要过滤,我下载时错误了好多次
可能需要加个装饰器处理一下,在装饰器中处理长度和非法字符
@TrackHelperProperty()
@fuck_name_illegal_char()
def Title(self):

使用手机号登录,提示当前登录存在安全风险,请稍候再试

具体返回的信息如下

Traceback (most recent call last):
File "/usr/local/bin/pyncm", line 8, in
sys.exit(main())
File "/usr/local/lib/python3.10/dist-packages/pyncm/main.py", line 490, in main
login.LoginViaCellphone(args.phone, args.pwd)
File "/usr/local/lib/python3.10/dist-packages/pyncm/apis/login.py", line 135, in LoginViaCellphone
WriteLoginInfo(login_status)
File "/usr/local/lib/python3.10/dist-packages/pyncm/apis/login.py", line 27, in WriteLoginInfo
raise LoginFailedException(sess.login_info["content"])
pyncm.apis.LoginFailedException: {'loginType': 1, 'code': 10003, 'message': '当前登录存在安全风险,请 稍后再试'}

请问大佬,这个应该如何解决啊

作者厉害,这个问题我还没有找到解决方法,Worker exception:[Errno 2] No such file or directory

if name == 'main':
ncm_helper = nutils.helper.NcmHelper(output=r"E:\CloudMusic\output", reporter=sys.stdout.write)
ncm_helper.DownloadAllTracksInPlaylistAndMerge(id=779016853, folder=r"E:\CloudMusic\output" )
代码运行后出现的问题,这个我还没有找到解决方法

Supported audio file for E:\CloudMusic\output\1325898067 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\1329713104 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\1331819040 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\1361193752 is missing,Cannot continue formatting!
Error while getting track attribute TrackPublishTime,using fallback value None
Supported audio file for E:\CloudMusic\output\26289183 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\28652821 is missing,Cannot continue formatting!
Worker exception:[Errno 2] No such file or directory: "E:\CloudMusic\output\4 Non Blondes - What's Up?.lrc\lyrics.json"
Supported audio file for E:\CloudMusic\output\471754946 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\514235010 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\5268162 is missing,Cannot continue formatting!
Supported audio file for E:\CloudMusic\output\573240010 is missing,Cannot continue formatting!
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Achim Reichel - Aloha Heja He.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\AC/DC - Dirty Deeds Done Dirt Cheap.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Adele - Skyfall (Full Length).lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Adele - Someone Like You.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Adele - When We Were Young.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Alborada Del Inka - The Last Mohican.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Alison Krauss - When You Say Nothing At All.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Amy Winehouse - Love Is A Losing Game.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Andy Williams - Where Do I Begin.lrc\lyrics.json'
Worker exception:[Errno 2] No such file or directory: 'E:\CloudMusic\output\Anna F - Too Far.lrc\lyrics.json'

匿名登陆失败

新版本,新问题.jpg
旧版本可以正常匿名登陆,新版本会登陆失败
嗯,旧版本是没问题的

旧版本 https://github.com/mos9527/pyncm/releases/tag/1.6.9.1

> pyncm "https://music.163.com/#/song?id=1882642256"
2023-08-09 11:45:54 pyncm.main [INFO] 以匿名身份登陆成功,deviceId=dgGOOGgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, UID: 8762336087
2023-08-09 11:45:54 pyncm.main [INFO] 处理任务 ID: 1882642256 类型: 单曲
2023-08-09 11:45:54 pyncm.main [INFO] 开始下载 #1 / 1 - Oracle - 黄霄雲,HOYO-MiX - Oracle - 128kbps - MP3
2023-08-09 11:45:55 pyncm.main [INFO] 完成下载 #1 / 1 - Oracle - 黄霄雲,HOYO-MiX
2023-08-09 11:45:55 pyncm.main [INFO] 任务完成率 100.0%
5.31MB: 100.0%|███████████████████████████████████████████████████████████████████████████████████▉| 1.00/1 00:01<00:00

新版本 https://github.com/mos9527/pyncm/releases/tag/1.6.9.3

> pyncm "https://music.163.com/#/song?id=1882642256"
Traceback (most recent call last):
  File "pyncm\__main__.py", line 763, in <module>
  File "pyncm\__main__.py", line 679, in __main__
  File "pyncm\apis\login.py", line 285, in LoginViaAnonymousAccount
AssertionError: 匿名登陆失败
[29476] Failed to execute script '__main__' due to unhandled exception!

Reporting a vulnerability

Hello!

I hope you are doing well!

We are a security research team. Our tool automatically detected a vulnerability in this repository. We want to disclose it responsibly. GitHub has a feature called Private vulnerability reporting, which enables security research to privately disclose a vulnerability. Unfortunately, it is not enabled for this repository.

Can you enable it, so that we can report it?

Thanks in advance!

PS: you can read about how to enable private vulnerability reporting here: https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository

希望增加api使用session作为参数,或者能直接使用session调用api的功能

我原本想使用异步来同时操控两个网易云的账号调用不同的api, 但有时候会出现账号二的函数调用api时使用的却是账号一的session,
例如下图:
image
image
我现在的解决方法是先保存每个账号的session,然后每次调用api前都 SetCurrentSession(session),
但如果可以的话还是希望api能增加使用session作为参数的功能,例如:
apis.cloudsearch.GetSearchResult('abc', session=session)
或者
session.cloudsearch.GetSearchResult('abc')

关于python3.8中海象运算符特性

您好,在您的MD文档中标明了适配python3.x,但当我clone运行后却发生报错,经过查阅是ncm_core.py第308行中的:=,这是python3.8新加的特性,我本人的python也刚好只是3.7,所以就导致了这个问题,希望能尽快得到修复或修改相关文档。如果不是这个原因造成的错误,也还请指出,以下是我的出错详情。

Traceback (most recent call last):
File "d:/github/pyncm/cs.py", line 1, in
from ncm.ncm_core import NeteaseCloudMusic
File "d:\github\pyncm\ncm\ncm_core.py", line 308
self.log(','.join((cookie:= self.session.cookies.get_dict()).keys()), format=strings.DEBUG_UPDATED_COOKIE)
^
SyntaxError: invalid syntax

列表乱序问题

调用pyncm.apis.track.GetTrackAudio(id_list)时,返回的数据result['data']是乱序的

likelist接口未找到

您好!因为我看到 Binaryify/NeteaseCloudMusicAPI 中提供了获取已喜欢音乐 id 列表的功能,所以想把这个功能也添加到pyncm的API中,但是每次调用的时候后都会显示找不到likelist接口。我写的函数是这样的:

@WeapiCryptoRequest
@UserIDBasedApi
@LoginRequiredApi
def GetUserLikeList():
    """网页端 - 获取某用户已喜欢音乐

    Args:
        user_id (int): 用户 ID。置 0 表示当前已登录的用户 . defaults to 0

    Returns:
        dict
    """
    return "/weapi/likelist", {
        "uid": str(user_id)
    }

KeyError: 'lyric'

在描述此问题前我先说一个我已解决的问题:当我尝试调用方法时提示我未找到Crypto模块,而我确认pip list后发现已安装此模块,于是我尝试重新安装pip install Crypto,不出所料提示包已存在。
解决方法:最后我通过手动查询发现package里的crypto文件夹为小写,于是我手动修改文件夹名后完成了调试,问题解决。

目前新问题的状况是ncm_func中的命令我已测试成功,但当我打算使用

from ncm.ncm_func import NCMFunctions
NCM = NCMFunctions()
print(NCM.DownloadAllSongsInPlaylistAndMerge(322305604))

调试时却出现了以下错误

Traceback (most recent call last):
  File "d:/github/pyncm/cs.py", line 5, in <module>
    print(NCM.DownloadAllSongsInPlaylistAndMerge(322305604))
  File "d:\github\pyncm\ncm\ncm_func.py", line 408, in DownloadAllSongsInPlaylistAndMerge
    self.MutilWrapper(self.QueueDownloadAllSongsInPlaylist)(id, quality, folder,merge_only)
  File "d:\github\pyncm\ncm\ncm_func.py", line 392, in wrapper
    queue_func(id, quality, folder)
  File "d:\github\pyncm\ncm\ncm_func.py", line 160, in QueueDownloadAllSongsInPlaylist
    self.DownloadAndFormatLyrics(track_id, folder=track_root)
  File "d:\github\pyncm\ncm\ncm_func.py", line 346, in DownloadAndFormatLyrics
    self.FormatLyrics(folder)
  File "d:\github\pyncm\ncm\ncm_func.py", line 212, in FormatLyrics
    lyrics = self.LoadLyrics(folder)
  File "d:\github\pyncm\ncm\ncm_func.py", line 187, in LoadLyrics
    for lrc in lyrics.keys() if lrc in ['lrc', 'tlyric']]
  File "d:\github\pyncm\ncm\ncm_func.py", line 187, in <listcomp>
    for lrc in lyrics.keys() if lrc in ['lrc', 'tlyric']]
KeyError: 'lyric'

使用`--no-overwrite`跳过既有歌曲会使`task.extension`不存在导致`--save-m3u`时出错

看起来在没下载歌曲时不会定义extension这个属性,而恰好在保存m3u时需要这个。版本1.6.13,使用pipx安装。

Traceback (most recent call last):
  File "/home/user/.local/bin/pyncm", line 8, in <module>
    sys.exit(__main__())
             ^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/pyncm/lib/python3.11/site-packages/pyncm/__main__.py", line 755, in __main__
    filePath = task.save_as + '.' + task.extension
                                    ^^^^^^^^^^^^^^
AttributeError: 'TrackDownloadTask' object has no attribute 'extension'

DumpSessionAsString & LoadSessionFromString 错误

具体如下
首次登录

rsp = login.LoginQrcodeCheck(self.uuid)
        if rsp['code'] == 803 or rsp['code'] == 800:
            login.WriteLoginInfo(login.GetCurrentLoginStatus())

这个时候调用cloudsearch.GetSearchResult() 返回正常的结果

但是如果再次登录的时候使用session

SetCurrentSession(LoadSessionFromString(DumpSessionAsString(GetCurrentSession())))

cloudsearch.GetSearchResult() 会返回一个加密的response

{'result': '35b1748964a......3580c7d96ead6d0236e54a94', 'code': 200, 'abroad': True}

所以这个扫码登录是正常的,但是通过LoadSessionFromString来登录就不正常了。猜测可能是多了一个验证的参数?

邮箱登录报错

from pyncm import apis
r=apis.login.LoginViaEmail(email='email',password='password')

Response is not valid JSON : Expecting value: line 1 column 1 (char 0)
Response : <Response [200]>
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\code_project\Python_project\login\login.py", line 2, in
r=apis.login.LoginViaEmail(email='email',password='password')
File "D:\Code\Python\Python3.10\lib\site-packages\pyncm\apis\login.py", line 197, in LoginViaEmail
WriteLoginInfo(login_status)
File "D:\Code\Python\Python3.10\lib\site-packages\pyncm\apis\login.py", line 27, in WriteLoginInfo
if not sess.login_info["content"]["code"] == 200:
TypeError: 'Response' object is not subscriptable

ZeroDivisionError: division by zero

PS C:\Users\DELL> pyncm https://music.163.com/#/artist?id=1064078 --phone  --pwd 
2023-06-23 23:45:09 pyncm.main [INFO] 账号 :z0z0r4 (VIP 0)
2023-06-23 23:45:09 pyncm.main [INFO] 处理任务 ID: 1064078 类型: 艺术家
2023-06-23 23:45:09 pyncm.main [INFO] 艺术家:Xeuphoria
0.00B: 0.0%|                                                                                           | 0.00/0 00:00<?Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "D:\Python\Python311\Scripts\pyncm.exe\__main__.py", line 7, in <module>
  File "D:\Python\Python311\Lib\site-packages\pyncm\__main__.py", line 700, in __main__
    logger.info(f'任务完成率 {(executor.finished_tasks * 100 / len(queuedTasks)):.1f}%')
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
ZeroDivisionError: division by zero
0.00B: 0.0%|

部分文件名,发生保存失败

URL: "https://music.163.com/m/album?id=37256090"
测试命令: pyncm --max-workers 8 --template "{artists} - {track}" --quality lossless --lyric-no romalrc --load "login.dat" --http --log-level LOG_LEVEL "https://music.163.com/m/album?id=37256090"
ps: 上述命令中login.dat 需要替换

失败歌曲名称:Aimer - Ref:rain
结果: Aimer - Ref ,留下一个无法播放的文件
如图:
image

感谢作者!!

添加一个获取收藏歌手的func

添加一个func用来获取用户收藏的歌手,需要登录

@WeapiCryptoRequest
def GetArtistInfo(limit=5000):
'''网页端 - 获取收藏歌手内容
Args:
limit (int, optional): 单次获取量. Defaults to 30.

Returns:
    dict
'''
return '/api/artist/sublist', {"limit": str(limit)}

下载《我喜欢的音乐》歌单时报错

# pyncm --load .pyncm "https://music.163.com/playlist\?id\=*********"

[WARN] coloredlogs 没有安装,日志不会以彩色输出
[INFO] pyncm.main 读取登录信息 : .pyncm
[INFO] pyncm.main 处理任务 ID: ********* 类型: 歌单®
[INFO] pyncm.main 歌单 :****喜欢的音乐
[ERRO] pyncm.api Response is not valid JSON : Extra data: line 1 column 26 (char 25)
Traceback (most recent call last):
  File "/home/sakari/.local/bin/pyncm", line 8, in <module>
    sys.exit(__main__())
  File "/home/sakari/.local/lib/python3.10/site-packages/pyncm/__main__.py", line 510, in __main__
    total_queued += subroutine(ids)  # Enqueue tasks
  File "/home/sakari/.local/lib/python3.10/site-packages/pyncm/__main__.py", line 323, in __call__
    queued += self.forIds(
  File "/home/sakari/.local/lib/python3.10/site-packages/pyncm/__main__.py", line 272, in forIds
    dDetails = track.GetTrackDetail(ids).get("songs")
AttributeError: 'Response' object has no attribute 'get'

尝试过 pyncm --phone --pwd --savedemos/手机登录.py 生成的 session,均为以上报错

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.