NeteaseCloudMusic_PythonSDK/example.py

116 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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接口类就让他保持最原始简洁的状态就好其他的留给大家去自由发挥吧
友情提示:单个账户每天发送验证码的次数有限制,千万别一直调试登录接口。
"""