Code Monkey home page Code Monkey logo

netease-cloud-music-dl's Introduction

网易云音乐下载器

基于Python3.X编写的网易云音乐命令行下载器,自动下载专辑封面,记录歌手名、音乐标题、专辑名等元数据,并写入ID3 Tags metadata容器。在github上试了几个高星的下载器都没有写入专辑封面,对于强迫症患者简直不能忍,于是一怒之下决定自己写。

Preview

Preview

Installation

若没有安装Python3,请先到官网下载并安装:

https://www.python.org/download/releases/3.0/

首先下载源码:

$ git clone https://github.com/codezjx/netease-cloud-music-dl.git

进入根目录,然后执行:

$ python3 setup.py install

最终显示以下log,表示顺利安装:

running install
running bdist_egg
running egg_info
...
...
Finished processing dependencies for netease-cloud-music-dl==x.x.x

后续直接在命令行中通过ncm指令即可快速调用相关功能,Warning: 目前只支持Python3.x版本

Feature

  • 支持下载专辑封面并嵌入MP3文件
  • 支持写入歌手名、音乐标题、专辑名等信息至ID3 Tags
  • 支持跳过已下载的音频文件
  • 支持常见设置选项,如:保存路径、音乐命名格式、文件智能分类等
  • 默认下载比特率为320k的高品质音乐(若木有320k则会自动下载最高比特率)
  • 支持下载单首/多首歌曲
  • 支持下载歌手热门单曲(可配置最大下载数)
  • 支持下载专辑所有歌曲
  • 支持下载公开歌单所有歌曲

(注意:已下架的音乐暂时无法下载)

通过ncm -h即可查看所支持的参数列表:

$ ncm -h
usage: ncm [-h] [-s song_id] [-ss song_ids [song_ids ...]] [-hot artist_id]
           [-a album_id] [-p playlist_id]

optional arguments:
  -h, --help            show this help message and exit
  -s song_id            Download a song by song_id
  -ss song_ids [song_ids ...]
                        Download a song list, song_id split by space
  -hot artist_id        Download an artist hot 50 songs by artist_id
  -a album_id           Download an album all songs by album_id
  -p playlist_id        Download a playlist all songs by playlist_id

Usage

下载单曲

使用参数-s,后加歌曲id或者歌曲完整url,如:

$ ncm -s 123123
or
$ ncm -s http://music.163.com/#/song?id=123123

下载多首歌曲

使用参数-ss,后加歌曲ids或者歌曲完整urls(id或url之间通过空格隔开),如:

$ ncm -ss 123123 456456 789789
or
$ ncm -ss url1 url2 url3

下载某歌手的热门单曲(默认下50首,可配置)

使用参数-hot,后加歌手id或者完整url,如:

$ ncm -hot 123123
or
$ ncm -hot http://music.163.com/#/artist?id=123123

下载某张专辑的所有歌曲

使用参数-a,后加专辑id或者完整url,使用方法同上。

下载某个公开的歌单

使用参数-p,后加歌单id或者完整url,使用方法同上,必须确认是公开的歌单才能下载哦。

Settings

配置文件在在用户目录下自动生成,路径如下:

/Users/yourUserName/.ncm/ncm.ini

目前支持以下几项设置:

[settings]

#--------------------------------------
# 热门音乐的最大下载数,默认50
# Range: 0 < hot_max <= 50
#--------------------------------------
download.hot_max = 50

#--------------------------------------
# 音乐文件的下载路径,默认在用户目录.ncm/download目录下
#--------------------------------------
download.dir = /Users/yourUserName/.ncm/download

#--------------------------------------
# 音乐命名格式,默认1
# 1: 歌曲名
# 2: 歌手 - 歌曲名
# 3: 歌曲名 - 歌手
#--------------------------------------
song.name_type = 1

#--------------------------------------
# 文件智能分类,默认1
# 1: 不分文件夹
# 2: 按歌手分文件夹
# 3: 按歌手/专辑分文件夹
#--------------------------------------
song.folder_type = 1

Warning: 智能分类设置目前只针对-s-ss参数有效,-hot/-a/-p分别会存于后缀为:-hot50/-album/-playlist的文件夹中,方便管理本地音乐。

Feedback

如果遇到Bugs,欢迎提issue或者PR,谢谢各位支持~

License

MIT License

Copyright (c) 2017 codezjx [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

netease-cloud-music-dl's People

Contributors

aisuneko avatar codezjx avatar icebear67 avatar josedelinux avatar leewp14 avatar roadt 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netease-cloud-music-dl's Issues

调整图片大小 的函数问题,某些歌曲会有bug,OSError: cannot write mode P as JPEG

error:

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/PIL/JpegImagePlugin.py", line 628, in _save
    rawmode = RAWMODE[im.mode]
KeyError: 'P'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/ncm", line 11, in <module>
    load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
  File "/usr/lib/python3.7/site-packages/ncm/start.py", line 67, in main
    download_song_by_id(get_parse_id(args.song_id), config.DOWNLOAD_DIR)
  File "/usr/lib/python3.7/site-packages/ncm/downloader.py", line 17, in download_song_by_id
    download_song_by_song(song, download_folder, sub_folder)
  File "/usr/lib/python3.7/site-packages/ncm/downloader.py", line 66, in download_song_by_song
    resize_img(os.path.join(song_download_folder, cover_file_name))
  File "/usr/lib/python3.7/site-packages/ncm/file_util.py", line 19, in resize_img
    img.save(file_path, quality=quality)
  File "/usr/lib/python3.7/site-packages/PIL/Image.py", line 2088, in save
    save_handler(self, fp, filename)
  File "/usr/lib/python3.7/site-packages/PIL/JpegImagePlugin.py", line 630, in _save
    raise IOError("cannot write mode %s as JPEG" % im.mode)
OSError: cannot write mode P as JPEG

样例:
蝉证序

处理方法:
先将img转为rgb模式,不再判断是否为png
原函数:

def resize_img(file_path, max_size=(640, 640), quality=90):
    try:
        img = Image.open(file_path)
    except IOError:
        print('Can\'t open image:', file_path)
        return

    if img.size[0] > max_size[0] or img.size[1] > max_size[1]:
        img.thumbnail(max_size, Image.ANTIALIAS)
        if img.format == 'PNG':
            img = img.convert('RGB')
        img.save(file_path, quality=quality)

修改:

def resize_img(file_path, max_size=(640, 640), quality=90):
    try:
        img = Image.open(file_path)
    except IOError:
        print('Can\'t open image:', file_path)
        return

    img=img.convert('RGB')

    if img.size[0] > max_size[0] or img.size[1] > max_size[1]:
        img.thumbnail(max_size, Image.ANTIALIAS)
        img.save(file_path, quality=quality)

AttributeError: parallel

Installed /usr/lib/python3.4/site-packages/netease_cloud_music_dl-0.2.0-py3.4.egg
Processing dependencies for netease-cloud-music-dl==0.2.0
Searching for Pillow>=4.3.0
Reading http://mirrors.tencentyun.com/pypi/simple/Pillow/
Downloading http://mirrors.tencentyun.com/pypi/packages/81/1a/6b2971adc1bca55b9a53ed1efa372acff7e8b9913982a396f3fa046efaf8/Pillow-6.0.0.tar.gz#md5=9da5d2db0d7604ba553ece1ab7ca53a3
Best match: Pillow 6.0.0
Processing Pillow-6.0.0.tar.gz
Writing /tmp/easy_install-dqt3r9m7/Pillow-6.0.0/setup.cfg
Running Pillow-6.0.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dqt3r9m7/Pillow-6.0.0/egg-dist-tmp-l45s5_zi
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 154, in save_modules
    yield saved
  File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 195, in setup_context
    yield
  File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 250, in run_setup
    _execfile(setup_script, ns)
  File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 45, in _execfile
    exec(code, globals, locals)
  File "/tmp/easy_install-dqt3r9m7/Pillow-6.0.0/setup.py", line 792, in <module>
  File "/usr/lib/python3.4/site-packages/setuptools/__init__.py", line 145, in setup
    return distutils.core.setup(**attrs)
  File "/usr/lib64/python3.4/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib64/python3.4/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.4/site-packages/setuptools/command/bdist_egg.py", line 163, in run
    self.run_command("egg_info")
  File "/usr/lib64/python3.4/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib64/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 296, in run
    self.find_sources()
  File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 303, in find_sources
    mm.run()
  File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 534, in run
    self.add_defaults()
  File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 570, in add_defaults
    sdist.add_defaults(self)
  File "/usr/lib/python3.4/site-packages/setuptools/command/py36compat.py", line 36, in add_defaults
    self._add_defaults_ext()
  File "/usr/lib/python3.4/site-packages/setuptools/command/py36compat.py", line 119, in _add_defaults_ext
    build_ext = self.get_finalized_command('build_ext')
  File "/usr/lib64/python3.4/distutils/cmd.py", line 299, in get_finalized_command
    cmd_obj.ensure_finalized()
  File "/usr/lib64/python3.4/distutils/cmd.py", line 107, in ensure_finalized
    self.finalize_options()
  File "/tmp/easy_install-dqt3r9m7/Pillow-6.0.0/setup.py", line 268, in finalize_options
  File "/usr/lib64/python3.4/distutils/cmd.py", line 103, in __getattr__
    raise AttributeError(attr)
AttributeError: parallel

AttributeError: type object 'Path' has no attribute 'home'

ncm -h

Traceback (most recent call last):
File "/usr/local/bin/ncm", line 9, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 351, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2363, in load_entry_point
return ep.load()
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2088, in load
entry = import(self.module_name, globals(),globals(), ['name'])
File "", line 2237, in _find_and_load
File "", line 2226, in _find_and_load_unlocked
File "", line 1191, in _load_unlocked
File "", line 1161, in _load_backward_compatible
File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/start.py", line 6, in
File "", line 2237, in _find_and_load
File "", line 2226, in _find_and_load_unlocked
File "", line 1191, in _load_unlocked
File "", line 1161, in _load_backward_compatible
File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/config.py", line 14, in
AttributeError: type object 'Path' has no attribute 'home'

mac系统下报错

ncm -p https://music.163.com/#/song?id=557581476
Traceback (most recent call last):
File "/usr/local/bin/ncm", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 76, in main
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 41, in download_playlist_songs
UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-6: ordinal not in range(128)

TypeError: Only byte strings can be passed to C code

跑一下程序,遇到这样的问题,环境win7 python 3.6
PS D:\netease-cloud-music-dl> ncm -s 27256783
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 66, in mai
n
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 15, i
n download_song_by_id
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 47, i
n download_song_by_song
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\api.py", line 72, in get_s
ong_url
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\api.py", line 33, in post_
request
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\encrypt.py", line 15, in e
ncrypted_request
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\encrypt.py", line 24, in a
es_encrypt
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher\AES.py", line 264, in new
return create_cipher(sys.modules[name], key, mode, *args, **kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher_init
.py", line 130, in _create_cipher
return modes[mode](factory, **kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher_mode_cbc.py", line 232, in _create_cbc_cipher
cipher_state = factory._create_base_cipher(kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher\AES.py", line 131, in create_base_cipher
expect_byte_string(key)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Util_raw_api.py", line 175, in expect_byte_string
raise TypeError("Only byte strings can be passed to C code")
TypeError: Only byte strings can be passed to C code
PS D:\wy\netease-cloud-music-dl> ncm -s http://music.163.com/song?id=27256783
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 66, in mai
n
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 15, i
n download_song_by_id
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 47, i
n download_song_by_song
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\api.py", line 72, in get_s
ong_url
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\api.py", line 33, in post

request
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\encrypt.py", line 15, in e
ncrypted_request
File "c:\programdata\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\encrypt.py", line 24, in a
es_encrypt
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher\AES.py", line 264, in new
return create_cipher(sys.modules[name], key, mode, *args, **kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher_init
.py", line 130, in _create_cipher
return modes[mode](factory, **kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher_mode_cbc.py", line 232, in _create_cbc_cipher
cipher_state = factory._create_base_cipher(kwargs)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Cipher\AES.py", line 131, in _create_base_cipher
expect_byte_string(key)
File "c:\programdata\anaconda3\lib\site-packages\Crypto\Util_raw_api.py", line 175, in expect_byte_string
raise TypeError("Only byte strings can be passed to C code")
TypeError: Only byte strings can be passed to C code

-bash: ncm: command not found

安装完了,提示ncm找不到?
Finished processing dependencies for netease-cloud-music-dl==0.2.0
bogon:~ huai$ ncm
-bash: ncm: command not found

ncm -p https://music.163.com/playlist?id=874616835下到759这里出错

759: What’s your name? (collaboration with 壇蜜)
Traceback (most recent call last):
File "E:\Python3.6.5\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 76, in main
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 42, in download_playlist_songs
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 53, in download_song_by_song
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 92, in download_file
OSError: [Errno 22] Invalid argument: 'E:\pd下载\my music\临时新 - playlist\What’s your name (collaboration with 壇蜜)\t.mp3'

大神,Python 3.5 安装报错

he headers or library files could not be found for zlib,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html

Traceback (most recent call last):
File "/var/folders/kf/chkwq36d5tjfd8bc4wyxn7cw0000gn/T/easy_install-ml4gskih/Pillow-5.3.0/setup.py", line 802, in
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/bdist_egg.py", line 161, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/bdist_egg.py", line 147, in call_command
self.run_command(cmdname)
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/install_lib.py", line 11, in run
self.build()
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/command/install_lib.py", line 107, in build
self.run_command('build_ext')
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/command/build_ext.py", line 338, in run
self.build_extensions()
File "/var/folders/kf/chkwq36d5tjfd8bc4wyxn7cw0000gn/T/easy_install-ml4gskih/Pillow-5.3.0/setup.py", line 589, in build_extensions
main.RequiredDependencyException: zlib

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 157, in save_modules
yield saved
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 198, in setup_context
yield
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 255, in run_setup
DirectorySandbox(setup_dir).run(runner)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 285, in run
return func()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 253, in runner
_execfile(setup_script, ns)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 47, in _execfile
exec(code, globals, locals)
File "/var/folders/kf/chkwq36d5tjfd8bc4wyxn7cw0000gn/T/easy_install-ml4gskih/Pillow-5.3.0/setup.py", line 814, in
main.RequiredDependencyException:

The headers or library files could not be found for zlib,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "setup.py", line 26, in
keywords=['ncm', 'netease', 'cloud-music', 'downloader'],
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/install.py", line 67, in run
self.do_egg_install()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/install.py", line 117, in do_egg_install
cmd.run()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 411, in run
self.easy_install(spec, not self.no_deps)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 655, in easy_install
return self.install_item(None, spec, tmpdir, deps, True)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 702, in install_item
self.process_distribution(spec, dist, deps)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 747, in process_distribution
[requirement], self.local_index, self.easy_install
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/pkg_resources/init.py", line 851, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/pkg_resources/init.py", line 1123, in best_match
return self.obtain(req, installer)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/pkg_resources/init.py", line 1135, in obtain
return installer(requirement)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 674, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 700, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 881, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 1120, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 1106, in run_setup
run_setup(setup_script, args)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 258, in run_setup
raise
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 198, in setup_context
yield
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 169, in save_modules
saved_exc.resume()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 144, in resume
six.reraise(type, exc, self._tb)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 157, in save_modules
yield saved
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 198, in setup_context
yield
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 255, in run_setup
DirectorySandbox(setup_dir).run(runner)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 285, in run
return func()
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 253, in runner
_execfile(setup_script, ns)
File "/Users/john/.virtualenvs/myenv/lib/python3.5/site-packages/setuptools/sandbox.py", line 47, in _execfile
exec(code, globals, locals)
File "/var/folders/kf/chkwq36d5tjfd8bc4wyxn7cw0000gn/T/easy_install-ml4gskih/Pillow-5.3.0/setup.py", line 814, in
setuptools.sandbox.UnpickleableException: RequiredDependencyException('\n\nThe headers or library files could not be found for zlib,\na required dependency when compiling Pillow from source.\n\nPlease see the install instructions at:\n https://pillow.readthedocs.io/en/latest/installation.html\n\n',)

请求支持 FLAC 文件

现在的接口貌似可以下载到 FLAC 的歌曲了,为啥不支持 FLAC 呢 (不过转了一圈要给 FLAC 加封面貌似有点麻烦就是了

有copyright的下载不了

NCM,有copyright的下载不了。
以前GIT有个netease-dl,它可以绕过copyright,但是netease-dl无人维护,最近netease music可能是升级了API等,netease-dl这套完全不能用了。

error: The read operation timed out

Installed d:\program files\python\python35\lib\site-packages\netease_cloud_music
_dl-0.2.0-py3.5.egg
Processing dependencies for netease-cloud-music-dl==0.2.0
Searching for pycrypto>=2.6.1
Reading https://pypi.python.org/simple/pycrypto/
Best match: pycrypto 2.6.1
Downloading https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de3
3889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz#md5=55a61a054aa66812daf516
1a0d5d7eda
error: The read operation timed out

Windows下某些符号导致保存时报错

如歌曲ID 454069168

·17 song name:ты любил её ?!
Traceback (most recent call last):
  File "C:\Users\Administrator\Miniconda3\Scripts\ncm-script.py", line 11, in <module>
    load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
  File "C:\Users\Administrator\Miniconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 75, in main
  File "C:\Users\Administrator\Miniconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 41, in download_playlist_songs
  File "C:\Users\Administrator\Miniconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 51, in download_song_by_song
  File "C:\Users\Administrator\Miniconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 85, in download_file
OSError: [Errno 22] Invalid argument: 'C:\\Users\\Administrator\\.ncm\\download\\dalebotbeats - ты любил её ?!.mp3'

可否跳过处理,最后反馈?

感谢~

目录重名的问题

两个歌单如果是同一个名字,会下载到同一个目录中去。建议可以自动区分一下。
album有没有重名的问题还没有试过。

code': -460, 'msg': 'Cheating'

查到需要在config.py里面添加headers cookie 但不知道怎么做

Return {'code': -460, 'msg': 'Cheating'} when try to post {'ids': [273369], 'br': 320000, 'csrf_token': ''} => http://music.163.com/weapi/song/enhance/player/url?csrf_token=
Traceback (most recent call last):
File "E:\Python3.6.5\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 76, in main
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 42, in download_playlist_songs
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 49, in download_song_by_song
File "E:\Python3.6.5\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\api.py", line 73, in get_song_url
TypeError: 'NoneType' object is not subscriptable

跳过已下载的机制

目前跳过已下载的机制是通过检测是否有同名文件存在的。
这就限定:

  1. 所有的音乐都下载到同一台电脑的同一个文件夹
  2. 下载了以后你不想保留了,为了以后能检测重复也不能删

也就是说,ncm的适用场景是用于下载歌曲后永久保存,不适用于一下场景:

  1. 多台电脑,同时使用ncm
  2. 随听随删而又不想或不能用网易云客户端

也许可以额外记录网易云音乐的歌曲 id 来检测重复。
然后这个历史文件可以用 git 或 dropbox 之类的东西管理,
也可由ncm本身实现同步。

我当前即尝试记录歌曲 id, 然后历史文件用 git 管理,调用ncm下载单曲。

可参考 weakish/fm163

TypeError: expected str, bytes or os.PathLike object, not NoneType

Windows7 X64 anaconda3-4.4.0

C:\Users\Administrator\.ncm>ncm -s 123123
Traceback (most recent call last):
  File "C:\Anaconda3\Scripts\ncm-script.py", line 11, in <module>
    load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')(
)
  File "C:\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.6.egg\pkg_resources
\__init__.py", line 565, in load_entry_point
  File "C:\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.6.egg\pkg_resources
\__init__.py", line 2598, in load_entry_point
  File "C:\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.6.egg\pkg_resources
\__init__.py", line 2258, in load
  File "C:\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.6.egg\pkg_resources
\__init__.py", line 2264, in resolve
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 646, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 616, in _load_backward_compatible
  File "c:\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\nc
m\start.py", line 6, in <module>
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 646, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 616, in _load_backward_compatible
  File "c:\anaconda3\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\nc
m\config.py", line 13, in <module>
  File "C:\Anaconda3\lib\ntpath.py", line 75, in join
    path = os.fspath(path)
TypeError: expected str, bytes or os.PathLike object, not NoneType

Failed to establish a new connection: [Errno 61] Connection refused

ncm -p https://music.163.com/#/playlist?id=575568611
1 song name:静かな冬の夜
Traceback (most recent call last):
File "/usr/local/bin/ncm", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 75, in main
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 41, in download_playlist_songs
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/downloader.py", line 47, in download_song_by_song
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/api.py", line 72, in get_song_url
File "/usr/local/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/api.py", line 35, in post_request
File "/usr/local/lib/python3.6/site-packages/requests-2.18.3-py3.6.egg/requests/models.py", line 892, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/init.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

hMusic/mMusic/lMusic,随机选择?

我并没有看明白您的程序,

下述的下载让我感到奇怪,
第一,有hMusic,为何没有下载320kpbs的版本?
第二,没有128kpbs的版本,为何我下载下来的是128kpbs(显示)?
(下述来自于摘抄:http://music.163.com/api/playlist/detail?id=152261)

{"name":"Tristan - Original","id":19558027,"position":18,"alias":[],"status":0,"fee":8,"copyrightId":655010,"disc":"1","no":18,"artists":[{"name":"Two Steps From Hell","id":102714,"picId":0,"img1v1Id":0,"briefDesc":"","picUrl":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","img1v1Url":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","albumSize":0,"alias":[],"trans":"","musicSize":0,"topicPerson":0}],"album":{"name":"Invincible","id":1800915,"type":"专辑","size":22,"picId":6658642418470358,"blurPicUrl":"http://p1.music.126.net/vHXzXIE1G7FRgA89e3CuAg==/6658642418470358.jpg","companyId":0,"pic":6658642418470358,"picUrl":"http://p1.music.126.net/vHXzXIE1G7FRgA89e3CuAg==/6658642418470358.jpg","publishTime":1272816000000,"description":"","tags":"","company":"Two Steps From Hell","briefDesc":"","artist":{"name":"","id":0,"picId":0,"img1v1Id":0,"briefDesc":"","picUrl":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","img1v1Url":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","albumSize":0,"alias":[],"trans":"","musicSize":0,"topicPerson":0},"songs":[],"alias":["万夫莫敌"],"status":1,"copyrightId":0,"commentThreadId":"R_AL_3_1800915","artists":[{"name":"Two Steps From Hell","id":102714,"picId":0,"img1v1Id":0,"briefDesc":"","picUrl":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","img1v1Url":"http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg","albumSize":0,"alias":[],"trans":"","musicSize":0,"topicPerson":0}],"subType":"录音室版","transName":null},"starred":false,"popularity":85.0,"score":85,"starredNum":0,"duration":154626,"playedNum":0,"dayPlays":0,"hearTime":0,"ringtone":"","crbt":null,"audition":null,"copyFrom":"","commentThreadId":"R_SO_4_19558027","rtUrl":null,"ftype":0,"rtUrls":[],"copyright":2,"transName":null,"sign":"Original","rtype":0,"rurl":null,"mvid":0,"bMusic":{"name":null,"id":102790001,"size":1856409,"extension":"mp3","sr":44100,"dfsId":0,"bitrate":96000,"playTime":154626,"volumeDelta":-0.58},"mp3Url":null,"hMusic":{"name":null,"id":102681999,"size":6187928,"extension":"mp3","sr":44100,"dfsId":0,"bitrate":320000,"playTime":154626,"volumeDelta":-0.96},"mMusic":{"name":null,"id":102682000,"size":3093986,"extension":"mp3","sr":44100,"dfsId":0,"bitrate":160000,"playTime":154626,"volumeDelta":-0.53},"lMusic":{"name":null,"id":102790001,"size":1856409,"extension":"mp3","sr":44100,"dfsId":0,"bitrate":96000,"playTime":154626,"volumeDelta":-0.58}}

报错,之前一直正常使用的

Traceback (most recent call last):
File "D:\Python\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "D:\Python\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.7.egg\ncm\start.py", line 76, in main
File "D:\Python\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.7.egg\ncm\start.py", line 42, in download_playlist_songs
File "D:\Python\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.7.egg\ncm\downloader.py", line 49, in download_song_by_song
File "D:\Python\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.7.egg\ncm\api.py", line 72, in get_song_url
File "D:\Python\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.7.egg\ncm\api.py", line 35, in post_request
File "D:\Python\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "D:\Python\lib\json_init_.py", line 348, in loads
return _default_decoder.decode(s)
File "D:\Python\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Python\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Only download first ten songs from a playlist?

不知道是歌单的处理方式变了还是怎么回事,可以下载热门50首,但是只要是歌单只能下载前10首. 之前几个月还是正常使用,换了新电脑后在python 3.9下就是这样了
image

错误代码 -460 “网络太拥挤,请稍候再试”

Return {'code': -460, 'message': '网络太拥挤,请稍候再试!'} when try to post {'ids': [40729218], 'br': 320000, 'csrf_token': ''} => http://music.163.com/weapi/song/enhance/player/url?csrf_token=
Traceback (most recent call last):
  File "/usr/local/bin/ncm", line 33, in <module>
    sys.exit(load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')())
  File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/start.py", line 69, in main
  File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/downloader.py", line 22, in download_song_by_id
  File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/downloader.py", line 54, in download_song_by_song
  File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/api.py", line 73, in get_song_url
TypeError: 'NoneType' object is not subscriptable

Return {'code': -460, 'msg': 'Cheating'}

无法下载音乐,提示Cheating

(venv) hu@NASA:~$ ncm -p http://music.163.com/#/m/playlist?id=438323195
1: Under Construction
Return {'code': -460, 'msg': 'Cheating'} when try to post {'ids': [421563589], 'br': 320000, 'csrf_token': ''} => http://music.163.com/weapi/song/enhance/player/url?csrf_token=
Traceback (most recent call last):
  File "/home/hu/Git/netease-cloud-music-dl/venv/bin/ncm", line 11, in <module>
    load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
  File "/home/hu/Git/netease-cloud-music-dl/venv/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 76, in main
  File "/home/hu/Git/netease-cloud-music-dl/venv/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/start.py", line 42, in download_playlist_songs
  File "/home/hu/Git/netease-cloud-music-dl/venv/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/downloader.py", line 49, in download_song_by_song
  File "/home/hu/Git/netease-cloud-music-dl/venv/lib/python3.6/site-packages/netease_cloud_music_dl-0.2.0-py3.6.egg/ncm/api.py", line 73, in get_song_url

Not an validate MP3 file!

不知何时起开始这样的, 所有歌都一样

ncm -s 1365844416
Progress: 100.00%,     0.36KB, [OneRepublic - Rescue Me.mp3]
Progress: 100.00%,   876.14KB, [cover_1365844416.jpg]
Can't sync to MPEG frame, not an validate MP3 file!

ncm -s 1331800077
Progress: 100.00%,     0.36KB, [Rich Edwards - Turn Back Time.]
Progress: 100.00%,  3700.17KB, [cover_1331800077.jpg]
Can't sync to MPEG frame, not an validate MP3 file!

KeyError: 'RGBA'

Traceback (most recent call last):
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pillow-4.3.0-py3.6-win32.egg\PIL\JpegImagePlugin.py", line 605, in _save
KeyError: 'RGBA'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 76, in main
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\start.py", line 42, in download_playlist_songs
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\downloader.py", line 64, in download_song_by_song
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.6.egg\ncm\file_util.py", line 17, in resize_img
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pillow-4.3.0-py3.6-win32.egg\PIL\Image.py", line 1928, in save
File "C:\Users\lvshui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pillow-4.3.0-py3.6-win32.egg\PIL\JpegImagePlugin.py", line 607, in _save
OSError: cannot write mode RGBA as JPEG

UnicodeEncodeError: 'gbk' codec can't encode character '\xe5' in position 36: illegal multibyte sequence

Mp3 file already download: Traceback (most recent call last):
File "C:\Users\chenyue\AppData\Local\Programs\Python\Python35-32\Scripts\ncm-script.py", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "C:\Users\chenyue\AppData\Local\Programs\Python\Python35-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.5.egg\ncm\start.py", line 76, in main
File "C:\Users\chenyue\AppData\Local\Programs\Python\Python35-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.5.egg\ncm\start.py", line 42, in download_playlist_songs
File "C:\Users\chenyue\AppData\Local\Programs\Python\Python35-32\lib\site-packages\netease_cloud_music_dl-0.2.0-py3.5.egg\ncm\downloader.py", line 54, in download_song_by_song
UnicodeEncodeError: 'gbk' codec can't encode character '\xe5' in position 36: illegal multibyte sequence

不太懂报错

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/bin/ncm", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pkg_resources/init.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pkg_resources/init.py", line 2793, in load_entry_point
return ep.load()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pkg_resources/init.py", line 2411, in load
return self.resolve()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pkg_resources/init.py", line 2417, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
ModuleNotFoundError: No module named 'ncm'

下载歌单时,下载6首后停止下载

输出如下


jose@jose:~/utils/ncm/netease-cloud-music-dl$ ncm -p https://music.163.com/#/playlist?id=8729926516
1: In Case You Didn't Know
Mp3 file already download: Brett Young - In Case You Didn't Know.mp3
2: You Belong With Me
Mp3 file already download: Taylor Swift - You Belong With Me.mp3
3: When It Rains It Pours
Mp3 file already download: Luke Combs - When It Rains It Pours.mp3
4: Nobody But You (Duet with Gwen Stefani) [Live]
Mp3 file already download: Blake Shelton - Nobody But You (Duet with Gwen Stefani) [Live].mp3
5: Heaven
Mp3 file already download: Kane Brown - Heaven.mp3
6: Even Though I'm Leaving
Mp3 file already download: Luke Combs - Even Though I'm Leaving.mp3
jose@jose:~/utils/ncm/netease-cloud-music-dl$

为什么不能下载

安装成功为啥不能下载
也没有输出啥
现在是https 链接 是不是不能解密 所以不能下载

下载歌曲时报错

95: Moon
Progress: 100.00%, 4167.80KB, [Wisp X - Moon.mp3]
Traceback (most recent call last):ver_466993540.jpg]
File "/usr/local/lib/python3.7/dist-packages/PIL/ImageFile.py", line 233, in load
s = read(self.decodermaxblock)
File "/usr/local/lib/python3.7/dist-packages/PIL/PngImagePlugin.py", line 846, in load_read
cid, pos, length = self.png.read()
File "/usr/local/lib/python3.7/dist-packages/PIL/PngImagePlugin.py", line 129, in read
length = i32(s)
File "/usr/local/lib/python3.7/dist-packages/PIL/_binary.py", line 71, in i32be
return unpack_from(">I", c, o)[0]
struct.error: unpack_from requires a buffer of at least 4 bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/bin/ncm", line 11, in
load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/start.py", line 76, in main
File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/start.py", line 42, in download_playlist_songs
File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/downloader.py", line 66, in download_song_by_song
File "/usr/local/lib/python3.7/dist-packages/netease_cloud_music_dl-0.2.0-py3.7.egg/ncm/file_util.py", line 16, in resize_img
File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 2289, in thumbnail
im = self.resize(size, resample, box=box, reducing_gap=reducing_gap)
File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 1882, in resize
im = self.convert(self.mode[:-1] + "a")
File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 901, in convert
self.load()
File "/usr/local/lib/python3.7/dist-packages/PIL/ImageFile.py", line 239, in load
raise OSError("image file is truncated")
OSError: image file is truncated

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.