C#版 网易云音乐 API
本项目翻译自Node.js项目Binaryify/NeteaseCloudMusicApi
更新与原项目同步
使用方式请参考原项目文档,参数与返回结果与原项目完全一致
本项目需要 .NET Standard 2.0 (.NET Framework 4.6.1+ / .NET Core 2.0+) ,可跨平台使用
wwh1004/NLyric - 使用本项目自动搜索下载歌词
GitHub:
NeteaseCloudMusicApi-netstandard2.0.zip(已编译Dll)
NeteaseCloudMusicApi.Demo-net472.zip(.NET Framework版Demo)
NeteaseCloudMusicApi.Demo-netcoreapp3.1.zip(.NET Core版Demo)
- 登录
 - 刷新登录
 - 发送验证码
 - 校验验证码
 - 注册(修改密码)
 - 获取用户信息 , 歌单,收藏,mv, dj 数量
 - 获取用户歌单
 - 获取用户电台
 - 获取用户关注列表
 - 获取用户粉丝列表
 - 获取用户动态
 - 获取用户播放记录
 - 获取精品歌单
 - 获取歌单详情
 - 搜索
 - 搜索建议
 - 获取歌词
 - 歌曲评论
 - 收藏单曲到歌单
 - 专辑评论
 - 歌单评论
 - mv 评论
 - 电台节目评论
 - banner
 - 获取歌曲详情
 - 获取专辑内容
 - 获取歌手单曲
 - 获取歌手 mv
 - 获取歌手专辑
 - 获取歌手描述
 - 获取相似歌手
 - 获取相似歌单
 - 相似 mv
 - 获取相似音乐
 - 获取最近 5 个听了这首歌的用户
 - 获取每日推荐歌单
 - 获取每日推荐歌曲
 - 私人 FM
 - 签到
 - 喜欢音乐
 - 垃圾桶
 - 歌单 ( 网友精选碟 )
 - 新碟上架
 - 热门歌手
 - 最新 mv
 - 推荐 mv
 - 推荐歌单
 - 推荐新音乐
 - 推荐电台
 - 推荐节目
 - 独家放送
 - mv 排行
 - 获取 mv 数据
 - 播放 mv/视频
 - 排行榜
 - 歌手榜
 - 云盘
 - 电台 - 推荐
 - 电台 - 分类
 - 电台 - 分类推荐
 - 电台 - 订阅
 - 电台 - 详情
 - 电台 - 节目
 - 给评论点赞
 - 获取动态
 - 热搜列表(简略)
 - 发送私信
 - 发送私信歌单
 - 新建歌单
 - 收藏/取消收藏歌单
 - 歌单分类
 - 收藏的歌手列表
 - 订阅的电台列表
 - 相关歌单推荐
 - 付费精选接口
 - 音乐是否可用检查接口
 - 登录状态
 - 获取视频播放地址
 - 发送/删除评论
 - 热门评论
 - 视频评论
 - 退出登录
 - 所有榜单
 - 所有榜单内容摘要
 - 收藏视频
 - 收藏 MV
 - 视频详情
 - 相关视频
 - 关注用户
 - 新歌速递
 - 喜欢音乐列表(无序)
 - 收藏的 MV 列表
 - 获取最新专辑
 - 听歌打卡
 - 获取视频标签下的视频
 - 已收藏专辑列表
 - 获取动态评论
 - 歌单收藏者列表
 - 云盘歌曲删除
 - 热门话题
 - 电台 - 推荐类型
 - 电台 - 非热门类型
 - 电台 - 今日优选
 - 心动模式/智能播放
 - 转发动态
 - 删除动态
 - 分享歌曲、歌单、mv、电台、电台节目到动态
 - 通知-私信
 - 通知-评论
 - 通知-@我
 - 通知-通知
 - 设置
 - 云盘数据详情
 - 私信内容
 - 我的数字专辑
 - batch批量请求接口
 - 获取视频标签列表
 - 全部mv
 - 网易出品mv
 - 收藏/取消收藏专辑
 - 专辑动态信息
 - 热搜列表(详细)
 - 更换绑定手机
 - 检测手机号码是否已注册
 - 初始化昵称
 - 更新歌单描述
 - 更新歌单名
 - 更新歌单标签
 - 默认搜索关键词
 - 删除歌单
 - 电台banner
 - 用户电台
 - 热门电台
 - 电台 - 节目详情
 - 电台 - 节目榜
 - 电台 - 新晋电台榜/热门电台榜
 - 类别热门电台
 - 云村热评
 - 电台24小时节目榜
 - 电台24小时主播榜
 - 电台最热主播榜
 - 电台主播新人榜
 - 电台付费精品榜
 - 歌手热门50首歌曲
 
var api = new CloudMusicApi();var api = new CloudMusicApi();
/******************** 登录 ********************/
while (true) {
	var queries = new Dictionary<string, object>();
	Console.WriteLine("请输入账号(邮箱或手机)");
	string account = Console.ReadLine();
	bool isPhone = Regex.Match(account, "^[0-9]+$").Success;
	queries[isPhone ? "phone" : "email"] = account;
	Console.WriteLine("请输入密码");
	queries["password"] = Console.ReadLine();
	if (!CloudMusicApi.IsSuccess(await api.RequestAsync(isPhone ? CloudMusicApiProviders.LoginCellphone : CloudMusicApiProviders.Login, queries, false)))
		Console.WriteLine("登录失败,账号或密码错误");
	else
		break;
}
Console.WriteLine("登录成功");
Console.WriteLine();
/******************** 登录 ********************/
/******************** 获取账号信息 ********************/
var json = await api.RequestAsync(CloudMusicApiProviders.LoginStatus);
long uid = (long)json["profile"]["userId"];
Console.WriteLine($"账号ID: {uid}");
Console.WriteLine($"账号昵称: {json["profile"]["nickname"]}");
Console.WriteLine();
/******************** 获取账号信息 ********************/
/******************** 获取我喜欢的音乐 ********************/
json = await api.RequestAsync(CloudMusicApiProviders.UserPlaylist, new Dictionary<string, object> { ["uid"] = uid });
json = await api.RequestAsync(CloudMusicApiProviders.PlaylistDetail, new Dictionary<string, object> { ["id"] = json["playlist"][0]["id"] });
int[] trackIds = json["playlist"]["trackIds"].Select(t => (int)t["id"]).ToArray();
json = await api.RequestAsync(CloudMusicApiProviders.SongDetail, new Dictionary<string, object> { ["ids"] = trackIds });
Console.WriteLine($"我喜欢的音乐({trackIds.Length} 首):");
foreach (var song in json["songs"])
	Console.WriteLine($"{string.Join(",", song["ar"].Select(t => t["name"]))} - {song["name"]}");
Console.WriteLine();
/******************** 获取我喜欢的音乐 ********************/
/******************** 获取我的关注 ********************/
/******************** 获取我的关注 ********************/
json = await api.RequestAsync(CloudMusicApiProviders.UserFollows, new Dictionary<string, object> { ["uid"] = uid });
Console.WriteLine($"我的关注:");
foreach (var user in json["follow"])
	Console.WriteLine(user["nickname"]);
Console.WriteLine();
/******************** 获取我的动态 ********************/
json = await api.RequestAsync(CloudMusicApiProviders.UserEvent, new Dictionary<string, object> { ["uid"] = uid });
Console.WriteLine($"我的动态:");
foreach (var @event in json["events"])
	Console.WriteLine(JObject.Parse((string)@event["json"])["msg"]);
Console.WriteLine();
/******************** 获取我的动态 ********************/
/******************** 退出登录 ********************/
json = await api.RequestAsync(CloudMusicApiProviders.Logout);
Console.WriteLine("退出登录成功");
Console.WriteLine();
/******************** 退出登录 ********************/