Package: pycloudmusic163
pycloudmusic163​		使用 Python 快速调用网易云音乐 api参考NeteaseCloudMusicApi安装pipinstallpycloudmusic163简单使用获取歌单frompycloudmusic163importMusic163# 默认请求头headers=Music163.music163_headersheaders["cookie"]+="用户cookie"music163=Music163(headers=headers)# https://music.163.com/playlist?id=6843808070playlist=music163.playlist("6843808070")# 歌单id# 打印歌单标题 歌单作者 歌单简介print(playlist.name,playlist.user_str,playlist.description)formusicinplaylist:# 打印歌单每一首歌的标题 歌手print(music.name_str,music.artist_str)二维码登录frompycloudmusic163importLoginMusic163importtimelogin=LoginMusic163()# 获取keykey=login.login_qr_key()# 打印key# ('c13526fa-....', 'https://music.163.com/login?codekey=....')# 用第二个地址生成二维码 这里可以去 https://cli.im/ 来生成print(key)# 轮查二维码 803为登录成功whileTrue:code,music163,cookie=login.login_qr(key)ifcode==803:breaktime.sleep(3)# 验证登录成功 打印用户名称 用户签名 用户idmy=music163.my()print(my.name,my.signature,my.id)使用文档以下很长注意善用搜索 Ctrl+F（第一次写这么长的文档...，呜，倒了）0.错误码400: 参数错误
404: api不存在
-460: 出现-460 尝试在cookie加上 "appver=2.7.1.198277; os=pc;"
250: 风险提示 异常1.登录from pycloudmusic163 import LoginMusic163LoginMusic163()初始化 login 对象login 对象login.login_email(self, email, password)邮箱登录参数说明:email：邮箱
password：密码错误码：501 未注册 502 密码错误成功返回状态码， Music163对象， cookie，失败返回错误码，""，""login.login_captcha(phone, country_code="86")发送手机验证码参数说明:phone： 手机号country_code： 国家码 (用于国外手机号登录)成功返回0，失败返回错误码login.login_cellphone(phone, password, captcha=False, country_code="86")手机/验证码 登录参数说明:phone： 手机号
password： 验证参数
captcha： True 时为验证码登录 password 值为验证码，False 时为密码登录 password 值为密码
country_code： 国家码 (用于国外手机号登录)
成功返回状态码， Music163对象， cookie，失败返回错误码，""，""login.login_qr_key()获取二维码 keylogin.login_qr(qr_key)二维码登录，查询二维码状态参数说明:qr_key：二维码 key状态码：801 等待扫码， 802 授权中， 800 二维码不存在或已过期， 803 登录成功
成功返回状态码, Music163对象, cookie，失败返回状态码login.check_captcha(phone, captcha, country_code="86")校验验证码参数说明:phone：手机号
captcha：验证码
country_code： 国家码 (用于国外手机号登录)
校验成功返回 True ，校验失败返回 False，api 错误返回错误码login.check_cellphone(phone, country_code="86")检查手机号是否被注册参数说明:phone：手机号
country_code： 国家码 (用于国外手机号登录)
未注册返回  None，被注册返回用户名，api 错误返回错误码login.register(name, phone, password, captcha, country_code="86")手机注册/修改密码参数说明:name：昵称phone：手机号password：密码captcha：验证码country_code：国家码 (用于国外手机号)成功返回状态码， Music163对象， cookie，失败返回错误码，""，""login.replace_cellphone(phone, captcha, old_captcha, country_code="86")更换绑定手机参数说明:phone：手机号captcha：新手机验证码old_captcha：原手机验证码country_code：国家码 (用于国外手机号)没有测试过的接口，返回啥我也不知道2.获取对象from pycloudmusic163 import Music163Music163(headers=headers)初始化 music163 对象可以通过Music163.music163_headers获取一个初始请求头然后传入 cookie 登录headers["cookie"] += "用户cookie"使用 login 对象登录成功也会返回 music163 对象music163.my()获取当前 cookie 用户信息并实例化 my 对像cookie 无效返回200，成功返回 my 对像，失败返回错误码music163.music(id_)获取歌曲并实例化 music 对像参数说明:id_：歌曲id 支持多 id (使用列表)成功返回 music 对像列表， 失败返回错误码music163.user(id_)获取用户并实例化 user 对像参数说明:id_：用户id成功返回 user 对像，失败返回错误码music163.my()获取当前 cookie 用户信息并实例化 my 对像参数说明:成功返回 my 对像，失败返回错误码，cookie 无效返回200music163.playlist(id_)获取歌单并实例化 playlist 对像参数说明:id_：歌单 id成功返回 playlist 对像，失败返回错误码music163.artist(id_)获取歌手并实例化 artist 对像参数说明:id_：歌手 id成功返回 artist 对像，失败返回错误码music163.album(id_)获取专辑并实例化 album 对像该方法实例化的 album 对像只有 id 和专辑相关接口暂时没有直接获取专辑信息的方法不推荐这样获取 album 对像参数说明:id_：专辑 id返回 album 对像music163.mv(id_)获取 mv 并实例化 mv 对像参数说明:id_：mv id成功返回mv对像，失败返回错误码music163.dj(id_)获取电台并实例化 dj 对像参数说明:id_：电台 id成功返回 dj 对像，失败返回错误码3.对象方法注意歌单，专辑，动态，云盘，歌手都支持保存在self.music_list的数据可以直接遍历该对像获取歌曲， 歌单，专辑，MV，动态都支持评论，因此都支持以下方法comment(hot=True, page=0, limit=20, before_time=0)该对象的评论comment_floor(comment_id, page=0, limit=20)楼层评论comment_like(comment_id, in_)评论点赞comment_add(content)发送评论comment_delete(comment_id)删除评论comment_reply(content, comment_id)回复评论以下是这些方法的参数说明:hot：热门评论 True 全部评论 Falsebefore_time：分页参数，取上一页最后一项的 time 获取下一页数据(获取超过5000条评论的时候需要用到)page：页数limit：一页获取数量comment_id：一律为评论id (comment返回的评论中的commentId)content：一律为评论内容in_：True 点赞，False 取消点赞歌单，专辑，MV，歌手，电台都支持 收藏，因此支持self.subscribe方法subscribe(in_)对像 收藏/取消收藏参数说明:in_：True 收藏 False 取消收藏成功返回0 失败返回错误码MV，歌手，歌曲都支持获取相似，因此支持self.similar方法similar()该对象的相似music163 对像music163.search(key, type_=1, page=0, limit=30)搜索返回的大部分内容都可以直接生成对象，不用二次请求从 pycloudmusic163.object 导入类后， 可以这样直接生成类(请求头, 一条数据)所有对象都继承于 Link Link.headers 即可以获取用于生成这个对像的请求头参数说明:key：搜索内容type_：搜索类型page：页数limit：一页获取数量成功返回内容 失败返回错误码type_ 搜索类型如下1: 单曲 
10: 专辑
100: 歌手
1000: 歌单
1002: 用户
1004: MV
1006: 歌词
1009: 电台
1014: 视频music163.personalized_playlist(limit=30)推荐歌单参数说明:limit：一页获取数量 (不支持 offset)成功返回内容 失败返回错误码music163.personalized_new_song(areaId=0, limit=10)推荐新歌参数说明:limit：一页获取数量 (不支持 offset)成功返回内容 失败返回错误码music163.personalized_dj()推荐电台参数说明:成功返回内容 失败返回错误码music163.home_page(refresh=True, cursor=None)首页-发现 app 主页信息参数说明:refresh：是否刷新数据cursor：上一条数据返回的 cursor成功返回内容 失败返回错误码music163.top_artist_list(type_=1, page=0, limit=100)歌手榜参数说明:type_：地区类型page：页数limit：一页获取数量成功返回内容 失败返回错误码地区类型
1: 华语
2: 欧美
3: 韩国
4: 日本music163.top_song(type_=0)新歌速递参数说明:type_：地区类型地区类型
全部:0 
华语:7 
欧美:96 
日本:8 
韩国:16user 对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportuseruser=user(Music163.music163_headers,{})# user 对象的属性# 用户uiduser.id# 用户名称user.name# 用户签名user.signature# 用户等级user.level# 头像user.cover# 会员 0 无user.vipuser.like_music()获取该 user 对象喜欢的歌曲 (返回 playlist 对象)user.playlist(page=0, limit=30)获取该 user 对象的歌单参数说明:page：页数music_id：一页获得数量成功返回 playlist 对象列表，失败返回错误码user.record(type_=True, music_object=True)获取该 user 对象听歌榜单参数说明:type_：True 所有时间，False 最近一周music_object：True 将 song 转为 music 对象返回，False 将 song 以字典返回成功返回数据 失败返回错误码返回数据的格式[{播放次数"song":music数据/music对象},{播放次数"song":music数据/music对象},...]user.follow(follow_in=True)关注该 user 对象用户参数说明:follow_in：True 时关注，False 取消关注成功返回0，失败返回错误码my 对象该对象继承于 user ，支持 user 所有方法属性frompycloudmusic163importMusic163frompycloudmusic163.objectimportmymy=my(Music163.music163_headers,{})# my 对象扩展的属性# 登录ipmy.login_ip# 登录时间戳my.login_time# 登录时间戳转字符串，格式 "%Y/%m/%d %H:%M:%S"my.login_time_strmy.recommend_playlist()获取日推my.recommend_resource()获取每日推荐歌单my.fm()私人fm，实例化一个fm对象并返回my.message()私信，实例化一个message对象并返回my.event()动态，实例化一个event对象并返回my.sublist_artist(page=0, limit=25)查看该 my 对象收藏的歌手my.sublist_album(page=0, limit=25)查看该 my 对象用户收藏的专辑my.sublist_dj(page=0, limit=25)查看该 my 对象用户收藏的电台my.sublist_mv(page=0, limit=25)查看该 my 对象用户收藏的 MVmy.sublist_topic(page=0, limit=50)查看该 my 对象用户收藏的专题以上 sublist 方法的参数说明:page：页数limit：一页获得数量my.cloud(page=0, limit=30)获取云盘数据，并实例化一个cloud对象返回参数说明:page：页数music_id：一页获得数量my.sign(type_=True)使用该 my 对象签到参数说明:type_：True 为安卓端签到3点经验，False 为网页签到2点经验成功返回0，失败返回错误码playmode_intelligence(self, music_id, sid=None, playlist_id=None)心动模式/智能播放参数说明:music_id：歌曲idsid：可选 要开始播放的歌曲的idplaylist_id：歌单id 默认使用喜欢的歌曲歌单成功返回数据 失败返回错误码message 对象使用 my 对象生成，也可以如下生成frompycloudmusic163importMusic163frompycloudmusic163.objectimportmessage# 如下生成无法保证 cookie 有效性, 使用 my 对象生成保证了 cookie 有效性headers=Music163.music163_headersheaders["cookie"]+="用户cookie"message=message(headers,"用户uid")message.comments(before_time=-1, limit=30)获取回复我参数说明:before_time：取上一页最后一个歌单的 updateTime，获取下一页数据limit：一页获取量成功返回数据 失败返回错误码message.forwards(page=0, limit=30)获取@我参数说明:page：页数limit：一页获取量成功返回数据 失败返回错误码message.notices(last_time=-1, limit=30)获取通知参数说明:last_time：传入上一次返回结果的 time，将会返回下一页的数据limit：一页获取量成功返回数据 失败返回错误码message.private_new()获取最接近联系人message.private_history(id_, page=0, limit=30, user_object=True)获取指定用户历史私信参数说明:id_：用户idpage：页数limit：一页获取量user_object：True 将 user 转为 user 对象返回，False 将 user 以 json 返回成功返回数据 失败返回错误码返回数据的格式[{私信数据"fromUser":user数据/user对象"toUser":user数据/user对象},{私信数据"fromUser":user数据/user对象"toUser":user数据/user对象},...]message.private(page=0, limit=30, user_object=True)获取私信列表参数说明:page：页数limit：一页获取量user_object：True 将 user 转为 user 对象返回，False 将 user 以 json 返回成功返回数据 失败返回错误码返回数据的格式同message.private_historymessage.send(msg, to_user_id, user_object=True)发送私信message.send_music(msg, id_, to_user_id, user_object=True)发送私信 带歌曲message.send_album(msg, id_, to_user_id, user_object=True)发送私信 带专辑message.send_playlist(msg, id_, to_user_id, user_object=True)发送私信 带歌单以上发送私信的参数说明:id_：用户idpage：页数limit：一页获取量id_：需一起发送的资源 iduser_object：True 将 user 转为 user 对象返回，False 将 user 以 json 返回成功返回第一位发送给的用户历史私信 失败返回错误码event 对象使用 my 对象生成，也可以如下生成frompycloudmusic163importMusic163frompycloudmusic163.objectimportevent# 如下生成无法保证 cookie 有效性, 使用 my 对象生成保证了 cookie 有效性headers=Music163.music163_headersheaders["cookie"]+="用户cookie"event=event(headers)event.event(last_time=-1, limit=30)获取下一页动态 保存至self.music_list参数说明:last_time：传入上一次返回结果的 time,将会返回下一页的数据limit：一页获取量成功返回0 失败返回错误码event.user_event(user_id, last_time=-1, limit=30)获取下一页动态 保存至self.music_list参数说明:user_id：用户idlast_time：传入上一次返回结果的 time,将会返回下一页的数据limit：一页获取量成功返回0 失败返回错误码event.del_(ev_id)删除cookie用户动态参数说明:ev_id：动态id成功返回0 失败返回错误码event.send(msg)发送动态event.send_music(msg, id_)发送动态 带歌曲event.send_playlist(msg, id_)发送动态 带歌单event.send_mv(msg, id_)发送动态 带MVevent.send_dj(msg, id_)发送动态 带电台event.send_dj_music(msg, id_)发送动态 带电台节目以上发送动态的参数说明:msg：内容，140 字限制，支持 emoji，@用户名id_：需一起发送的资源 id成功返回0 失败返回错误码_event 对象遍历 event 对象时生成，迭代返回frompycloudmusic163importMusic163frompycloudmusic163.objectimport_eventmusic=_event(Music163.music163_headers,{})# _event 对象的属性# 资源类型_event.data_type# 动态发布用户_event.user# 动态发布用户转字符串_event.user_str# 动态内容_event.msg# 动态图片_event.pics# 动态话题_event.act_name# 动态类型_event.type# 动态类型转字符串_event.type_str# 动态id_event.id# 动态id(ev_id)_event.ev_id# 动态分享数_event.share_coun# 动态评论数_event.comment_count# 动态点赞数_event.like_count# 动态时间_event.event_time_event.forward(msg)指定该  _event 对象转发到cookie用户参数说明:msg：内容ev_id：转发动态id成功返回0 失败返回错误码fm对象使用 my 对象生成，也可以如下生成frompycloudmusic163importMusic163frompycloudmusic163.objectimportfm# 如下生成无法保证 cookie 有效性, 使用 my 对象生成保证了 cookie 有效性headers=Music163.music163_headersheaders["cookie"]+="用户cookie"fm=fm(headers)fm.read()获取fm歌曲fm.write(id_)将歌曲扔进垃圾桶 (优化推荐)参数说明:id_：歌曲id成功返回 (0,垃圾桶歌曲数) 失败返回错误码cloud 对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportcloudcloud=cloud(Music163.music163_headers,{})# cloud 对象的属性# 云盘歌曲数cloud.cloud_count# 云盘最大容量cloud.max_size# 云盘已用容量cloud.size# 云盘当时页歌曲数据cloud.music_listcloud.get(page=0, limit=30)获取云盘数据 保存至self.music_list参数说明:page：页数limit：一页获取量成功返回0 失败返回错误码cloud.music(id_)获取云盘歌曲详细数据参数说明:id_：云盘歌曲id 支持多id使用列表 (self.music_list中的songId)成功返回数据 失败返回错误码cloud.del_(id_)删除云盘歌曲参数说明:id_：云盘歌曲id 支持多id使用列表 (self.music_list中的songId)成功返回0 失败返回错误码cloud_music 对象遍历 cloud 对象时生成，迭代返回frompycloudmusic163importMusic163frompycloudmusic163.objectimportmusicmusic=music(Music163.music163_headers,{})# cloud_music 对象的属性# 云盘歌曲idself.id# 标题self.name# 歌曲大小self.file_size# 歌曲文件名self.file_name# 歌手self.artist# 专辑self.album# 封面self.cover# 上传时间self.add_timecloud_music.set_music_data(id_, user_id)云盘歌曲信息匹配纠正 (不知道怎么用)参数说明:id_：要匹配的歌曲 iduser_id：用户 id成功返回数据 失败返回错误码下载该 music 对象歌曲 (使用 app 播放接口)  这个接口相当于在 app 中点击播放cloud_music.play(download_path, son_path="", chunk_size=1024, download_callback=None, quality=None)参数说明:参数参考music.music_downloadmusic 对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportmusicmusic=music(Music163.music163_headers,{})# music 对象的属性# 资源类型music.data_type# 歌曲idmusic.id# 标题列表 [大标题, 副标题]music.name# 标题转字符串music.name_str# 作者列表 [作者, 作者, ...]music.artist# 作者列表转字符串music.artist_str# 专辑列表music.album_data# 专辑列表转字符串music.album_str# 所有音质music.quality# mv idmusic.mv_id# 发表时间music.publish_time# True时获取完成资源链接后直接返回(不进行下载)music.not_download=Falsemusic.similar_playlist()该 music 对象的相似歌单music.similar_user()最近5个听了这 music 对象的用户music.album()实例化该对像专辑 album 对像 并返回 album 对像music.mv()获取该对像 mv 实例化 mv 对像 并返回 mv 对像music.like(like)红心该 music 对象与取消红心参数说明:like：红心 True 取消红心 False成功返回0 失败返回错误码music.lyric()该 music 对象的歌词参数说明:成功返回(类型码,歌词) 失败返回错误码类型码
0 滚动歌词 
1 不滚动歌词 
2 纯音乐 
3 暂无歌词下载该 music 对象歌曲 (使用 app 下载接口) 这个接口相当于在 app 中点击下载music.music_download(download_path, son_path="", chunk_size=1024, download_callback=None, quality=None)参数说明:download_path：下载目录son_path：下载至 下载目录下的子目录chunk_size：字节流大小download_callback：文件保存前回调 可设置文件名 默认文件名格式id_大标题.mp3quality：音质成功下载返回0 获取下载 url 失败时返回错误码download_callback 详细使用查看继承类（Link）download 方法说明错误码 -105需要会员下载该 music 对象歌曲 (使用 app 播放接口)  这个接口相当于在 app 中点击播放，会员歌曲返回试听music.play(download_path, son_path="", chunk_size=1024, download_callback=None, quality=None)参数说明:参数参考music.music_downloadplaylist 对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportplaylistplaylist=playlist(Music163.music163_headers,{})# playlist 对象的属性# 资源类型playlist.data_type# 歌单idplaylist.id# 歌单标题playlist.name# 歌单封面playlist.cover# 歌单创建者playlist.user# 歌单创建者转字符串playlist.user_str# 歌单tags列表playlist.tags# 歌单tags转字符串playlist.tags_str# 歌单描述playlist.description# 歌单播放量playlist.play_count# 歌单收藏量playlist.subscribed_count# 歌单创建时间playlist.create_time# 歌单歌曲playlist.music_listplaylist.add(music_id)向 playlist 对像添加歌曲参数说明:music_id：歌曲i d 支持多歌曲 id (使用列表)成功返回0，失败返回错误码playlist.del_(self, music_id)向 playlist 对像删除歌曲参数说明:music_id：歌曲 id 支持多歌曲 id (使用列表)成功返回0，对像剩余歌曲数，失败返回错误码playlist.subscribers(page=0, limit=20)查看歌单收藏者参数说明:page：页数music_id：一页获得数量成功返回数据，失败返回错误码artist对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportartistartist=artist(Music163.music163_headers,{})# artist 对象的属性# 歌手idartist.id# 歌手artist.name# 歌手简介artist.brief_desc_strartist.brief_desc# 专辑数artist.album_size# 单曲数artist.music_size# mv数artist.mv_size# 头像artist.coverartist.song_top()获取该对像热门50首 保存至self.music_listartist.song(hot=True, page=0, limit=100)获取该对像歌曲 保存至self.music_list参数说明:hot：True 按热度排序 False 按时间排序page：页数limit：一页获取数量成功返回0 失败返回错误码artist.album(page=0, limit=30)获取该对像专辑参数说明:page：页数limit：一页获取数量成功返回数据, 失败返回错误码album对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportalbumalbum=album(Music163.music163_headers,{})# album 对象的属性# 专辑idalbum.id# 专辑标题album.name# 专辑封面album.coveralbum.song()获取该对像专辑内容 保存至self.music_list (初始化 album 对象时会调用一次)mv对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportmvmv=mv(Music163.music163_headers,{})# mv 对象的属性mv.data_type# mv idmv.id# mv标题mv.name# mv介绍mv.desc# mv歌手mv.artistsmv.artists_str# mv tagsmv.tagsmv.tags_str# mv封面mv.cover# mv播放数mv.play_count# mv收藏数mv.subscribe_count# mv评论数mv.comment_count# mv分享数mv.share_count# mv质量mv.quality# 发布时间mv.publish_time# True时获取完成资源链接后直接返回(不进行下载)mv.not_download获取播放该mv对象指定的视频文件 参数参考music.music_downloadmv.play(download_path, son_path="", chunk_size=1024, download_callback=None, quality=1080)dj对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportdjdj=dj(Music163.music163_headers,{})# dj 对象的属性# 电台标题dj.name# 电台iddj.id# 电台封面dj.cover# 电台创建者dj.userdj.user_str# 电台描述dj.description# 电台tagsdj.tags# 电台分享量dj.share_count# 电台收藏量dj.subscribed_count# 电台单曲数dj.music_countdj.create_timedj.music(page=0, limit=30, asc=False)获取电台节目 保存在self.music_list参数说明:page：页数limit：一页获取数量asc：False 时间正序 True 时间倒序成功返回0, 失败返回错误码dj_music对象frompycloudmusic163importMusic163frompycloudmusic163.objectimportdj_musicdj_music=dj(Music163.music163_headers,{})# dj_music 对象的属性dj_music.data_type# 电台节目iddj_music.id# 电台节目标题dj_music.name# 电台节目简介dj_music.description# 电台节目封面dj_music.cover# 电台节目创建时间dj_music.create_time# 电台节目播放量dj_music.play_count# 电台节目点赞量dj_music.like_count# 电台节目评论量dj_music.comment_count下载该 music 对象歌曲 (使用 app 播放接口)  这个接口相当于在 app 中点击播放dj_music.play(download_path, son_path="", chunk_size=1024, download_callback=None, quality=None)参数说明:参数参考music.music_download