NeteaseCloudMusicApi
C#版 网易云音乐 API
简介
本项目翻译自Node.js项目Binaryify/NeteaseCloudMusicApi
更新与原项目同步
使用方式请参考原项目文档,参数与返回结果与原项目完全一致
本项目需要 .NET Standard 2.0 (.NET Framework 4.6.1+ / .NET Core 2.0+) ,可跨平台使用
样例项目
wwh1004/NLyric - 使用本项目自动搜索下载歌词
Dll与Demo下载
GitHub:
NeteaseCloudMusicApi-netstandard2.0.zip(已编译Dll)
NeteaseCloudMusicApi.Demo-net472.zip(.NET Framework版Demo)
NeteaseCloudMusicApi.Demo-netcoreapp2.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首歌曲
样例
实例化API
using (CloudMusicApi api = new CloudMusicApi()) {
// code here
}
完整样例-显示"我喜欢的音乐"
using (CloudMusicApi api = new CloudMusicApi()) {
try {
bool isOk;
JObject json;
int uid;
int[] trackIds;
/******************** 登录 ********************/
do {
Dictionary<string, string> queries;
string account;
bool isPhone;
queries = new Dictionary<string, string>();
Console.WriteLine("请输入账号(邮箱或手机)");
account = Console.ReadLine();
isPhone = Regex.Match(account, "^[0-9]+$").Success;
queries[isPhone ? "phone" : "email"] = account;
Console.WriteLine("请输入密码");
queries["password"] = Console.ReadLine();
(isOk, json) = await api.RequestAsync(isPhone ? CloudMusicApiProviders.LoginCellphone : CloudMusicApiProviders.Login, queries);
if (!isOk)
Console.WriteLine("登录失败,账号或密码错误");
} while (!isOk);
Console.WriteLine("登录成功");
Console.WriteLine();
/******************** 登录 ********************/
/******************** 获取账号信息 ********************/
(isOk, json) = await api.RequestAsync(CloudMusicApiProviders.LoginStatus, CloudMusicApi.EmptyQueries);
if (!isOk)
throw new ApplicationException($"获取账号信息失败: {json}");
uid = (int)json["profile"]["userId"];
Console.WriteLine($"账号ID: {uid}");
Console.WriteLine($"账号昵称: {json["profile"]["nickname"]}");
Console.WriteLine();
/******************** 获取账号信息 ********************/
/******************** 获取我喜欢的音乐 ********************/
(isOk, json) = await api.RequestAsync(CloudMusicApiProviders.UserPlaylist, new Dictionary<string, string> { { "uid", uid.ToString() } });
if (!isOk)
throw new ApplicationException($"获取用户歌单失败: {json}");
(isOk, json) = await api.RequestAsync(CloudMusicApiProviders.PlaylistDetail, new Dictionary<string, string> { { "id", json["playlist"][0]["id"].ToString() } });
if (!isOk)
throw new ApplicationException($"获取歌单详情失败: {json}");
trackIds = json["playlist"]["trackIds"].Select(t => (int)t["id"]).ToArray();
(isOk, json) = await api.RequestAsync(CloudMusicApiProviders.SongDetail, new Dictionary<string, string> { { "ids", string.Join(",", trackIds) } });
if (!isOk)
throw new ApplicationException($"获取歌曲详情失败: {json}");
Console.WriteLine($"我喜欢的音乐 ({trackIds.Length} 首):");
foreach (JObject song in json["songs"])
Console.WriteLine($"{string.Join(",", song["ar"].Select(t => t["name"]))} - {song["name"]}");
Console.WriteLine();
/******************** 获取我喜欢的音乐 ********************/
/******************** 退出登录 ********************/
(isOk, json) = await api.RequestAsync(CloudMusicApiProviders.Logout, CloudMusicApi.EmptyQueries);
if (!isOk)
throw new ApplicationException($"退出登录失败: {json}");
Console.WriteLine("退出登录成功");
Console.WriteLine();
/******************** 退出登录 ********************/
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}