基于 Python3 的网易云音乐下载器(支持嵌入专辑封面等 ID3-Tags 信息) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
codezjx
V2EX    分享创造

基于 Python3 的网易云音乐下载器(支持嵌入专辑封面等 ID3-Tags 信息)

  •  
  • codezjx
    codezjx 2017-08-08 23:17:33 +08:00 5008 次点击
    这是一个创建于 2987 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前阵子开源了个下载器,可以免费下载网易云的付费音乐并嵌入专辑封面,用了一阵子暂时没发现什么问题,特地分享给大家。

    简单介绍:

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

    地址:

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

    12 条回复    2017-08-10 22:12:19 +08:00
    run2
        1
    run2  
       2017-08-08 23:35:01 +08:00
    当心 dmca.... 猪厂法务部属于跑得快的那种
    KiseXu
        2
    KiseXu  
       2017-08-09 00:46:38 +08:00 via iPhone
    免费歌曲本来就可以下载,付费歌曲买个会员也不贵,你喜欢的项目到最后赚不到钱,最后受害的不还是自己么。
    codezjx
        3
    codezjx  
    OP
       2017-08-09 09:58:52 +08:00
    @KiseXu 网易云上面很多音乐都下架了,开个会员一点意义都没有,我之前就是开了一阵子的会员到头来还是得去虾米或者 QQ 音乐下。
    codezjx
        4
    codezjx  
    OP
       2017-08-09 09:59:41 +08:00
    @sobigfish GitHub 上有好多个下载器,都还坚挺着,淡定淡定。。。
    run2
        5
    run2  
       2017-08-09 10:15:56 +08:00
    @codezjx #4 我很淡定 只是提个醒,免得 repo list 里多个删不掉的被屏蔽的 repo (搜了下貌似是有不少,说明没以前那么夸张了?)
    inmyfree
        6
    inmyfree  
       2017-08-09 10:32:07 +08:00
    应该添加代理或者间隔时间的。。。。

    ncm -p 27382776

    Traceback (most recent call last):
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py chunked=chunked)
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/
    connectionpool.py", line 387, in _make_request
    six.raise_from(e, None)
    File "<string>", line 2, in raise_from
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py", line 383, in _make_request
    httplib_respOnse= conn.getresponse()
    File "/usr/lib/python3.4/http/client.py", line 1208, in getresponse
    response.begin()
    File "/usr/lib/python3.4/http/client.py", line 380, in begin
    version, status, reason = self._read_status()
    File "/usr/lib/python3.4/http/client.py", line 342, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
    File "/usr/lib/python3.4/socket.py", line 374, in readinto
    return self._sock.recv_into(b)
    ConnectionResetError: [Errno 104] Connection reset by peer

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/adapters.py", line 440, in send
    timeout=timeout
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py", line 639, in urlopen
    _stacktrace=sys.exc_info()[2])
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/util/retry.py", line 357, in increment
    raise six.reraise(type(error), error, _stacktrace)
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/packages/six.py", line 685, in reraise
    raise value.with_traceback(tb)
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py", line 601, in urlopen
    chunked=chunked)
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py", line 387, in _make_request
    six.raise_from(e, None)
    File "<string>", line 2, in raise_from
    File "/usr/local/lib/python3.4/dist-packages/urllib3-1.22-py3.4.egg/urllib3/connectionpool.py", line 383, in _make_request
    httplib_respOnse= conn.getresponse()
    File "/usr/lib/python3.4/http/client.py", line 1208, in getresponse
    response.begin()
    File "/usr/lib/python3.4/http/client.py", line 380, in begin
    version, status, reason = self._read_status()
    File "/usr/lib/python3.4/http/client.py", line 342, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
    File "/usr/lib/python3.4/socket.py", line 374, in readinto
    return self._sock.recv_into(b)
    urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/usr/local/bin/ncm", line 9, in <module>
    load_entry_point('netease-cloud-music-dl==0.2.0', 'console_scripts', 'ncm')()
    File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/start.py", line 75, in main
    File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/start.py", line 41, in download_playlist_songs
    File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/downloader.py", line 59, in download_song_by_song
    File "/usr/local/lib/python3.4/dist-packages/netease_cloud_music_dl-0.2.0-py3.4.egg/ncm/downloader.py", line 76, in download_file
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests-2.18.3-py3.4.egg/requests/adapters.py", line 490, in send
    raise ConnectionError(err, request=request)
    requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
    codezjx
        7
    codezjx  
    OP
       2017-08-09 13:18:32 +08:00
    @inmyfree 我之前是网络不稳定的时候会出现这个,偶发的,你隔一会再试试看,我这边是可以下载的。
    codezjx
        8
    codezjx  
    OP
       2017-08-09 14:05:33 +08:00
    @sobigfish 猪厂的法务估计已经放弃抵抗了,网上的破解教程实在是太多,防不胜防。他们的程序猿小哥快点把漏洞给填了才是硬道理。
    sunnyzhi
        9
    sunnyzhi  
       2017-08-10 11:04:05 +08:00
    我最近也在研究如何抓取 MOOV (一个香港的音乐 app )音乐文件,低码流的 acc 格式用的是 m3u8 的 hls 方式,这个没什么难度很容易搞定。但是无损版本的 acc 文件,不知道解密的细节以及不知如何取得 key。
    网易云是否需要反编译 app 才找到相关解密的方法呢?能否大致讲讲工作的流程,路线?
    623902748
        10
    623902748  
       2017-08-10 11:37:42 +08:00
    可不可以把歌词也嵌到 ID3-Tags 中?
    codezjx
        11
    codezjx  
    OP
       2017-08-10 21:50:02 +08:00
    @sunnyzhi 网易云的破解烂大街了,github 上随便搜一大堆,我是参考 github 是的这个项目: https://github.com/darknessomi/musicbox
    之前看文章是说通过 2 次 AES 对称加密了内容,然后秘钥和加密过程写在 js 里面了,所以很容易被破了。
    codezjx
        12
    codezjx  
    OP
       2017-08-10 22:12:19 +08:00
    @623902748 有相关的 api 可以获取到歌词,http://music.163.com/api/song/lyric?id=123123&lv=1。
    讲道理,嵌入歌词也是没问题的,可以上去给我提个 issue,我有空试下。
    对了,异步歌词和同步歌词有啥区别? ID3 里面有这两种。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5458 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:39 PVG 15:39 LAX 00:39 JFK 03:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86