mirror of
https://github.com/2061360308/NeteaseCloudMusic_PythonSDK.git
synced 2024-11-23 15:37:41 +00:00
116 lines
5.0 KiB
Python
116 lines
5.0 KiB
Python
"""
|
||
description: 网易云音乐API使用示例,这个示例引导你进行登录操作,然后下载一首歌曲
|
||
author: LuTong
|
||
date: 2020-10-07 10:00
|
||
"""
|
||
from pprint import pprint
|
||
|
||
import requests
|
||
|
||
from NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
|
||
|
||
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
|
||
|
||
version_result = netease_cloud_music_api.request("inner_version")
|
||
print(
|
||
f'当前使用NeteaseCloudMusicApi版本号:{version_result["NeteaseCloudMusicApi"]}\n当前使用NeteaseCloudMusicApi_V8版本号:{version_result["NeteaseCloudMusicApi_V8"]}') # 退出登录
|
||
|
||
|
||
|
||
def captcha_sent(_phone):
|
||
response = netease_cloud_music_api.request("/captcha/sent", {"phone": f"{_phone}"})
|
||
return response
|
||
|
||
|
||
def login_cellphone(_phone, _captcha):
|
||
response = netease_cloud_music_api.request("/login/cellphone", {"phone": f"{_phone}", "captcha": f"{_captcha}"})
|
||
return response
|
||
|
||
|
||
def song_url_v1(song_id):
|
||
# 获取歌曲mp3地址
|
||
response = netease_cloud_music_api.request("song_url_v1", {"id": song_id, "level": "exhigh"})
|
||
return response
|
||
|
||
|
||
def song_detail(song_id):
|
||
# 获取歌曲详情
|
||
response = netease_cloud_music_api.request("song_detail", {"ids": str(song_id)})
|
||
# 这里记得传一个字符串,其实所有参数都传字符串就行,需要数字的话内部会自己转换的,但是它默认你传入的时候是字符串,所以你传数字他不会自动转字符串,
|
||
# 这时如果遇到操作字符串的方法就会报错,所以最好都传字符串,避免出现意外
|
||
return response
|
||
|
||
|
||
def login_status():
|
||
response = netease_cloud_music_api.request("/login/status")
|
||
return response
|
||
|
||
|
||
# 登录
|
||
if not netease_cloud_music_api.cookie:
|
||
print("请设置cookie")
|
||
phone = input("请输入手机号:")
|
||
result = captcha_sent(phone)
|
||
print(result)
|
||
if result.get("code") == 200:
|
||
print("验证码已发送,请查收")
|
||
captcha = input("请输入验证码:")
|
||
result = login_cellphone(phone, captcha)
|
||
if result.get("code") == 200:
|
||
print("登录成功")
|
||
if netease_cloud_music_api.cookie:
|
||
print("cookie已自动设置")
|
||
else:
|
||
print("登录失败")
|
||
"""
|
||
调用登录接口后,会自动设置cookie,如果cookie失效,需要重新登录,登录过后api会在你的当前工作目录下创建cookie_storage文件保存你的cookie
|
||
在下次调用运行程序时,他会判断cookie是否过期,没有过期就自动读取cookie_storage文件中的cookie。
|
||
|
||
总的来说你不需要手动管理cookie,只需要调用登录接口,然后调用其他接口即可,cookie会自动设置,如果cookie过期,再次调用登录接口就好。
|
||
更好的办法是,在cookie还没有失效之前使用refresh_login接口刷新cookie,这样就不需要重新登录了(建议在你每次启动软件时都刷新,当然频繁重启调试的时候另算)
|
||
|
||
如果你想判断当前是否已经登录,if not netease_cloud_music_api.cookie 就可以了,或者调用/login/status接口
|
||
"""
|
||
|
||
# 获取登录状态
|
||
login_status_result = login_status()
|
||
# pprint(login_status_result)
|
||
if login_status_result['data']['data']["code"] == 200:
|
||
print(f'当前登录账号:{login_status_result["data"]["data"]["profile"]["nickname"]}')
|
||
|
||
version_result = netease_cloud_music_api.request("inner_version")
|
||
print(
|
||
f'当前使用NeteaseCloudMusicApi版本号:{version_result["NeteaseCloudMusicApi"]}\n当前使用NeteaseCloudMusicApi_V8版本号:{version_result["NeteaseCloudMusicApi_V8"]}') # 退出登录
|
||
|
||
# 获取歌曲mp3地址
|
||
song_url_result = song_url_v1(33894312)
|
||
if song_url_result.get("code") == 200:
|
||
song_url = song_url_result['data']["data"][0]['url']
|
||
else:
|
||
print("获取歌曲mp3地址失败")
|
||
exit(1)
|
||
# 获取歌曲详情
|
||
song_detail_result = song_detail(33894312)
|
||
if song_detail_result.get("code") == 200:
|
||
song_name = song_detail_result['data']['songs'][0]['name']
|
||
song_artist = song_detail_result['data']['songs'][0]['ar'][0]['name']
|
||
else:
|
||
print("获取歌曲详情失败")
|
||
exit(1)
|
||
# 下载歌曲mp3
|
||
print(f"正在下载歌曲:{song_name} - {song_artist}")
|
||
result = requests.get(song_url)
|
||
with open(f"{song_name} - {song_artist}.mp3", "wb") as f:
|
||
f.write(result.content)
|
||
print("下载完成")
|
||
|
||
"""
|
||
示例程序结束,如果你运行成功了,那么你的执行目录下应该有一个cookie_storage文件,里面保存了你的cookie,还有一个mp3文件,就是你下载的歌曲
|
||
有关其他API的使用方法请参考:https://docs.neteasecloudmusicapi.binaryify.com/
|
||
|
||
再次注明一下,我之前也想过要不要将登录状态管理和cookie刷新等等封装到NeteaseCloudMusicApi类中,
|
||
但最后我想的是,这毕竟这是一个api接口类,就让他保持最原始简洁的状态就好,其他的留给大家去自由发挥吧!
|
||
|
||
友情提示:单个账户每天发送验证码的次数有限制,千万别一直调试登录接口。
|
||
"""
|