2023-12-15 07:55:04 +00:00
|
|
|
|
"""
|
|
|
|
|
description: 网易云音乐API使用示例,这个示例引导你进行登录操作,然后下载一首歌曲
|
|
|
|
|
author: LuTong
|
|
|
|
|
date: 2020-10-07 10:00
|
|
|
|
|
"""
|
|
|
|
|
from pprint import pprint
|
|
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
|
2023-12-15 08:22:10 +00:00
|
|
|
|
from NeteaseCloudMusic import NeteaseCloudMusicApi, api_help, api_list
|
2023-12-15 07:55:04 +00:00
|
|
|
|
|
|
|
|
|
netease_cloud_music_api = NeteaseCloudMusicApi() # 初始化API
|
|
|
|
|
|
2023-12-15 08:22:10 +00:00
|
|
|
|
version_result = netease_cloud_music_api.request("inner_version")
|
|
|
|
|
print(
|
|
|
|
|
f'当前使用NeteaseCloudMusicApi版本号:{version_result["NeteaseCloudMusicApi"]}\n当前使用NeteaseCloudMusicApi_V8版本号:{version_result["NeteaseCloudMusicApi_V8"]}') # 退出登录
|
|
|
|
|
|
|
|
|
|
|
2023-12-15 07:55:04 +00:00
|
|
|
|
|
|
|
|
|
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接口类,就让他保持最原始简洁的状态就好,其他的留给大家去自由发挥吧!
|
|
|
|
|
|
|
|
|
|
友情提示:单个账户每天发送验证码的次数有限制,千万别一直调试登录接口。
|
|
|
|
|
"""
|