KuGouMusicApi项目的 C 语言包装库,使用quilkjs-ng引擎调用 Javascript。
补充:目前已集成网易云和酷狗两家的接口
python语言,dart语言绑定在NeteaseCloudMusic_PythonSDK
MusicLibrary 提供了一个 C 语言接口,用于调用 KuGouMusicApi、NeteaseCloudMusicApi 的功能。通过 QuickJS 引擎,开发者可以轻松地在 C 程序中运行 JavaScript 代码,完成诸如歌单管理、音乐搜索、推荐等功能。
- 本项目仅供学习使用,请尊重版权,请勿利用此项目从事商业行为及非法用途!
- 使用本项目的过程中可能会产生版权数据。对于这些版权数据,本项目不拥有它们的所有权。为了避免侵权,使用者务必在 24 小时内清除使用本项目的过程中所产 生的版权数据。
- 由于使用本项目产生的包括由于本协议或由于使用或无法使用本项目而引起的任何性质的任何直接、间接、特殊、偶然或结果性损害(包括但不限于因商誉损失、停 工、计算机故障或故障引起的损害赔偿,或任何及所有其他商业损害或损失)由使用者负责。
- 禁止在违反当地法律法规的情况下使用本项目。 对于使用者在明知或不知当地法律法规不允许的情况下使用本项目所造成的任何违法违规行为由使用者承担,本 项目不承担由此造成的任何直接、间接、特殊、偶然或结果性责任。
- 音乐平台不易,请尊重版权,支持正版。
- 本项目仅用于对技术可行性的探索及研究,不接受任何商业(包括但不限于广告等)合作及捐赠。
- 如果官方音乐平台觉得本项目不妥,可联系本项目更改或移除。
注意: 使用库时至少需要包含
engine.h;如果需要调用酷狗相关接口,则额外包含kugou_music_api.h。同时确保JSContext不能跨线程使用。如果需要多线程支持,请为每个线程创建独立的JSContext。
| 方法原型 | 说明 |
|---|---|
int init_engine(); |
初始化 音乐引擎(进程级,全局一次) |
int destroy_engine(); |
销毁 音乐引擎,释放全局资源 |
JSContext *kugou_init(KugouProcessEnv *env); |
初始化酷狗 API 上下文 |
JSContext *kugou_init_simple(); |
使用默认配置初始化酷狗 API 上下文 |
KugouAPI *create_kugou_api(); |
创建并返回酷狗 API 操作对象,包含所有可调用的音乐接口方法封装 |
int kugou_destroy(); |
销毁酷狗 API 相关全局资源 |
JSContext *get_kugou_context(); |
创建/获取一个新的酷狗 JS 上下文 |
JSContext *ncm_init(NcmProcessEnv *env); |
初始化 网易云 API 上下文 |
NCMAPI *create_ncm_api(); |
创建并返回 网易云 API 操作对象,包含所有可调用的音乐接口方法封装 |
int ncm_destroy(); |
销毁 网易云 API 相关全局资源 |
JSContext *get_ncm_context(); |
创建/获取一个新的 网易云 JS 上下文 |
更详细的使用方法可以看头文件导出清单 kugou_music_api.h ncm_music_api.h
以下是一个简单的示例,展示了如何初始化引擎、创建酷狗上下文,并使用 top_song / playlist_detail 方法获取数据:
#include <stdio.h>
#include <stdlib.h>
#include <engine.h>
#include "kugou_music_api.h"
int main(int argc, char **argv)
{
init_engine();
printf("Engine initialized.\n");
KugouProcessEnv env = {
.platform = "lite", //lite: 酷狗概念版, 默认为手机版留空字符串
// 设备id(可选,建议固定 )
// KUGOU_API_GUID 建议为 uuidv4
// KUGOU_API_DEV 建议长度为 10 位的字符串
.KUGOU_API_GUID = "45593bdf-a805-4c68-80fb-c526733fa49b",
.KUGOU_API_DEV = "iz6v67tm56",
.KUGOU_API_MAC = "42:69:CB:E2:0D:DE", // MAC地址
};
JSContext *ctx = kugou_init(&env);
// // JSContext *ctx2 = get_context(); 创建第二个上下文
KugouAPI *api = create_kugou_api();
if (!ctx)
{
printf("Failed to initialize kugou context\n");
return 1;
}
const char *cookies = "";
const char *params = "{}";
const char *response = api->top_song(ctx, cookies, params, NULL);
printf("Response: %s\n", response);
free((void *)response);
kugou_destroy();
JSContext *ncmCtx = ncm_init(NULL);
NCMAPI *api = create_ncm_api();
const char *response3 = ncmApi->top_song(ncmCtx, "", "{\"id\": \"96\"}", NULL);\
printf("NCM API Response: %s\n", response3);
free((void *)response3);
ncm_destroy();
destroy_engine();
}因项目为简单学习使用,一下方法实际可用性未测试,欢迎 Pr 指正
| 序号 | KuGouMusic | NeteaseCloudMusic |
|---|---|---|
| 1 | 登录 | 登录 |
| 2 | 刷新登录 | 刷新登录 |
| 3 | 发送验证码 | 发送验证码 |
| 4 | dfid 获取 | 校验验证码 |
| 5 | 获取用户额外信息 | 注册(修改密码) |
| 6 | 获取用户 vip 信息 | 获取用户信息 , 歌单,收藏,mv, dj 数量 |
| 7 | 获取用户歌单 | 获取用户歌单 |
| 8 | 获取用户关注歌手 | 获取用户电台 |
| 9 | 获取用户听歌历史排行 | 获取用户关注列表 |
| 10 | 获取用户最近听歌历史 | 获取用户粉丝列表 |
| 11 | 获取继续播放信息 | 获取用户动态 |
| 12 | 收藏歌单/新建歌单 | 获取用户播放记录 |
| 13 | 取消收藏歌单/删除歌单 | 获取精品歌单 |
| 14 | 对歌单添加歌曲 | 获取歌单详情 |
| 15 | 对歌单删除歌曲 | 搜索 |
| 16 | 新碟上架 | 搜索建议 |
| 17 | 专辑信息 | 获取歌词 |
| 18 | 专辑详情 | 歌曲评论 |
| 19 | 专辑音乐列表 | 收藏单曲到歌单 |
| 20 | 获取音乐 URL | 专辑评论 |
| 21 | 获取歌曲高潮部分 | 歌单评论 |
| 22 | 搜索 | mv 评论 |
| 23 | 默认搜索关键词 | 电台节目评论 |
| 24 | 综合搜索 | banner |
| 25 | 热搜列表 | 获取歌曲详情 |
| 26 | 搜索建议 | 获取专辑内容 |
| 27 | 歌词搜索 | 获取歌手单曲 |
| 28 | 获取歌词 | 获取歌手 mv |
| 29 | 歌单分类 | 获取歌手专辑 |
| 30 | 歌单 | 获取歌手描述 |
| 31 | 主题歌单 | 获取相似歌手 |
| 32 | 音效歌单 | 获取相似歌单 |
| 33 | 获取歌单详情 | 相似 mv |
| 34 | 获取歌单所有歌曲 | 获取相似音乐 |
| 35 | 获取歌单所有歌曲(新版) | 获取最近 5 个听了这首歌的用户 |
| 36 | 相似歌单 | 获取每日推荐歌单 |
| 37 | 获取主题歌单所有歌曲 | 获取每日推荐歌曲 |
| 38 | 获取主题音乐 | 私人 FM |
| 39 | 获取主题音乐详情 | 签到 |
| 40 | 歌曲推荐 | 喜欢音乐 |
| 41 | 获取歌手和专辑图片 | 垃圾桶 |
| 42 | 获取歌手图片 | 歌单 ( 网友精选碟 ) |
| 43 | 获取音乐相关信息 | 新碟上架 |
| 44 | 获取更多音乐版本 | 热门歌手 |
| 45 | 获取音乐伴奏信息 | 最新 mv |
| 46 | 获取音乐 k 歌数量 | 推荐 mv |
| 47 | 获取音乐详情 | 推荐歌单 |
| 48 | 获取音乐专辑/歌手信息 | 推荐新音乐 |
| 49 | 私人 FM | 推荐电台 |
| 50 | banner | 推荐节目 |
| 51 | 乐库 banner | 独家放送 |
| 52 | 乐库电台 | mv 排行 |
| 53 | 乐库 | 获取 mv 数据 |
| 54 | 电台 - 推荐 | 播放 mv/视频 |
| 55 | 电台 | 排行榜 |
| 56 | 电台 - 图片 | 歌手榜 |
| 57 | 电台 - 音乐列表 | 云盘 |
| 58 | 编辑精选 | 电台 - 推荐 |
| 59 | 编辑精选数据 | 电台 - 分类 |
| 60 | 编辑精选歌单 | 电台 - 分类推荐 |
| 61 | 编辑精选专区 | 电台 - 订阅 |
| 62 | 编辑精选专区详情 | 电台 - 详情 |
| 63 | 领取 VIP | 电台 - 节目 |
| 64 | 获取歌手列表 | 给评论点赞 |
| 65 | 获取歌手详情 | 获取动态列表 |
| 66 | 获取歌手专辑 | 热搜列表(简略) |
| 67 | 获取歌手单曲 | 发送私信 |
| 68 | 获取歌手 MV | 发送私信歌单 |
| 69 | 关注歌手 | 新建歌单 |
| 70 | 取消关注歌手 | 收藏/取消收藏歌单 |
| 71 | 获取关注歌手新歌 | 歌单分类 |
| 72 | 获取视频 url | 收藏的歌手列表 |
| 73 | 获取歌曲 MV | 订阅的电台列表 |
| 74 | 获取视频相关信息 | 相关歌单 |
| 75 | 获取视频详情 | 付费精选接口 |
| 76 | 新歌速递 | 音乐是否可用检查接口 |
| 77 | 场景音乐列表 | 登录状态 |
| 78 | 场景音乐详情 | 获取视频播放地址 |
| 79 | 获取场景音乐讨论区 | 发送/删除评论 |
| 80 | 获取场景音乐模块 Tag | 热门评论 |
| 81 | 获取场景音乐歌单列表 | 视频评论 |
| 82 | 获取场景音乐视频列表 | 退出登录 |
| 83 | 获取场景音乐音乐列表 | 所有榜单 |
| 84 | 每日推荐 | 所有榜单内容摘要 |
| 85 | 历史推荐 | 收藏视频 |
| 86 | 风格推荐 | 收藏 MV |
| 87 | 排行列表 | 视频详情 |
| 88 | 排行榜推荐列表 | 相关视频 |
| 89 | 排行榜往期列表 | 关注用户 |
| 90 | 排行榜信息 | 新歌速递 |
| 91 | 排行榜歌曲列表 | 喜欢音乐列表(无序) |
| 92 | 歌曲评论 | 收藏的 MV 列表 |
| 93 | 歌曲评论-根据分类返回 | 获取最新专辑 |
| 94 | 歌曲评论-根据热词返回 | 听歌打卡 |
| 95 | 楼层评论 | 获取视频标签/分类下的视频 |
| 96 | 歌单评论 | 已收藏专辑列表 |
| 97 | 专辑评论 | 获取动态评论 |
| 98 | 歌曲曲谱 | 歌单收藏者列表 |
| 99 | 曲谱详情 | 云盘歌曲删除 |
| 100 | 推荐曲谱 | 热门话题 |
| 101 | 曲谱合集 | 电台 - 推荐类型 |
| 102 | 曲谱合集详情 | 电台 - 非热门类型 |
| 103 | 提交听歌历史 | 电台 - 今日优选 |
| 104 | 获取服务器时间 | 心动模式/智能播放 |
| 105 | 刷刷 | 转发动态 |
| 106 | AI 推荐 | 删除动态 |
| 107 | 频道 - 获取用户所有频道 | 分享歌曲、歌单、mv、电台、电台节目到动态 |
| 108 | 频道 - 详情 | 通知-私信 |
| 109 | 频道 - 频道安利 | 通知-评论 |
| 110 | 频道 - 相似频道 | 通知-@我 |
| 111 | 频道 - 订阅 | 通知-通知 |
| 112 | 频道 - 音乐故事 | 设置 |
| 113 | 频道 - 音乐故事详情 | 云盘数据详情 |
| 114 | 动态 - 最常访问 | 私信内容 |
| 115 | 获取用户公开的音乐 | 我的数字专辑 |
| 116 | 听书 - 每日推荐 | batch 批量请求接口 |
| 117 | 听书 - 排行榜推荐 | 获取视频标签列表 |
| 118 | 听书 - VIP 推荐 | 全部 mv |
| 119 | 听书 - 每周推荐 | 网易出品 mv |
| 120 | 听书 - 专辑详情 | 收藏/取消收藏专辑 |
| 121 | 听书 - 专辑音乐列表 | 专辑动态信息 |
| 122 | 歌曲详情 - 歌曲成绩单 | 热搜列表(详细) |
| 123 | 歌曲详情 - 歌曲成绩单详情 | 更换绑定手机 |
| 124 | 检测手机号码是否已注册 | |
| 125 | 初始化昵称 | |
| 126 | 更新歌单描述 | |
| 127 | 更新歌单名 | |
| 128 | 更新歌单标签 | |
| 129 | 默认搜索关键词 | |
| 130 | 删除歌单 | |
| 131 | 电台 banner | |
| 132 | 用户电台 | |
| 133 | 热门电台 | |
| 134 | 电台 - 节目详情 | |
| 135 | 电台 - 节目榜 | |
| 136 | 电台 - 新晋电台榜/热门电台榜 | |
| 137 | 类别热门电台 | |
| 138 | 云村热评 | |
| 139 | 电台 24 小时节目榜 | |
| 140 | 电台 24 小时主播榜 | |
| 141 | 电台最热主播榜 | |
| 142 | 电台主播新人榜 | |
| 143 | 电台付费精品榜 | |
| 144 | 歌手热门 50 首歌曲 | |
| 145 | 购买数字专辑 | |
| 146 | 获取 mv 点赞转发评论数数据 | |
| 147 | 获取视频点赞转发评论数数据 | |
| 148 | 调整歌单顺序 | |
| 149 | 调整歌曲顺序 | |
| 150 | 独家放送列表 | |
| 151 | 获取推荐视频 | |
| 152 | 获取视频分类列表 | |
| 153 | 获取全部视频列表接口 | |
| 154 | 获取历史日推可用日期列表 | |
| 155 | 获取历史日推详细数据 | |
| 156 | 国家编码列表 | |
| 157 | 首页-发现 | |
| 158 | 首页-发现-圆形图标入口列表 | |
| 159 | 数字专辑-全部新碟 | |
| 160 | 数字专辑-热门新碟 | |
| 161 | 数字专辑&数字单曲-榜单 | |
| 162 | 数字专辑-语种风格馆 | |
| 163 | 数字专辑详情 | |
| 164 | 更新头像 | |
| 165 | 歌单封面上传 | |
| 166 | 楼层评论 | |
| 167 | 歌手全部歌曲 | |
| 168 | 精品歌单标签列表 | |
| 169 | 用户等级信息 | |
| 170 | 电台个性推荐 | |
| 171 | 用户绑定信息 | |
| 172 | 用户绑定手机 | |
| 173 | 新版评论 | |
| 174 | 点赞过的视频 | |
| 175 | 收藏视频到视频歌单 | |
| 176 | 删除视频歌单里的视频 | |
| 177 | 最近播放的视频 | |
| 178 | 音乐日历 | |
| 179 | 电台订阅者列表 | |
| 180 | 云贝签到信息 | |
| 181 | 云贝签到 | |
| 182 | 云贝所有任务 | |
| 183 | 云贝 todo 任务 | |
| 184 | 云贝今日签到信息 | |
| 185 | 云贝完成任务 | |
| 186 | 云贝收入 | |
| 187 | 云贝支出 | |
| 188 | 云贝账户信息 | |
| 189 | 账号信息 | |
| 190 | 最近联系人 | |
| 191 | 私信音乐 | |
| 192 | 抱一抱评论 | |
| 193 | 评论抱一抱列表 | |
| 194 | 收藏的专栏 | |
| 195 | 关注歌手新歌 | |
| 196 | 关注歌手新 MV | |
| 197 | 歌手详情 | |
| 198 | 云盘上传 | |
| 199 | 二维码登录 | |
| 200 | 话题详情 | |
| 201 | 话题详情热门动态 | |
| 202 | 歌单详情动态 | |
| 203 | 绑定手机 | |
| 204 | 一起听状态 | |
| 205 | 用户历史评论 | |
| 206 | 云盘歌曲信息匹配纠正 | |
| 207 | 云贝推歌 | |
| 208 | 云贝推歌历史记录 | |
| 209 | 已购单曲 | |
| 210 | 获取 mlog 播放地址 | |
| 211 | 将 mlog id 转为视频 id | |
| 212 | vip 成长值 | |
| 213 | vip 成长值获取记录 | |
| 214 | vip 任务 | |
| 215 | 领取 vip 成长值 | |
| 216 | 歌手粉丝 | |
| 217 | 数字专辑详情 | |
| 218 | 数字专辑销量 | |
| 219 | 音乐人数据概况 | |
| 220 | 音乐人播放趋势 | |
| 221 | 音乐人任务 | |
| 222 | 账号云豆数 | |
| 223 | 领取云豆 | |
| 224 | 获取 VIP 信息 | |
| 225 | 音乐人签到 | |
| 226 | 发送文本动态 | |
| 227 | 获取客户端歌曲下载 url | |
| 228 | 获取歌单所有歌曲 | |
| 229 | 乐签信息 | |
| 230 | 最近播放-歌曲 | |
| 231 | 最近播放-视频 | |
| 232 | 最近播放-声音 | |
| 233 | 最近播放-歌单 | |
| 234 | 最近播放-专辑 | |
| 235 | 最近播放-播客 | |
| 236 | 签到进度 | |
| 237 | 重复昵称检测 | |
| 238 | 歌手粉丝数量 | |
| 239 | 音乐人任务(新) | |
| 240 | 内部版本接口 | |
| 241 | 歌单更新播放量 | |
| 242 | 黑胶时光机 | |
| 243 | 音乐百科 - 简要信息 | |
| 244 | 乐谱列表 | |
| 245 | 乐谱内容 | |
| 246 | 曲风列表 | |
| 247 | 曲风偏好 | |
| 248 | 曲风详情 | |
| 249 | 曲风-歌曲 | |
| 250 | 曲风-专辑 | |
| 251 | 曲风-歌单 | |
| 252 | 曲风-歌手 | |
| 253 | 私信和通知接口 | |
| 254 | 回忆坐标 | |
| 255 | 播客搜索 | |
| 256 | 播客声音上传 | |
| 257 | 验证接口-二维码生成 | |
| 258 | 验证接口-二维码检测 | |
| 259 | 听歌识曲 | |
| 260 | 根据 nickname 获取 userid 接口 | |
| 261 | 播客声音列表 | |
| 262 | 专辑简要百科信息 | |
| 263 | 歌曲简要百科信息 | |
| 264 | 歌手简要百科信息 | |
| 265 | mv 简要百科信息 | |
| 266 | 搜索歌手 | |
| 267 | 用户贡献内容 | |
| 268 | 用户贡献条目、积分、云贝数量 | |
| 269 | 年度听歌报告 | |
| 270 | 播客声音搜索 | |
| 271 | 播客声音排序 | |
| 272 | 播客列表详情 | |
| 273 | 本地歌曲文件匹配网易云歌曲信息 | |
| 274 | 歌曲音质详情 | |
| 275 | 歌曲红心数量 | |
| 276 | 私人 FM 模式选择 | |
| 277 | 播客删除 | |
| 278 | 电台排行榜获取 | |
| 279 | 获取声音歌词 | |
| 280 | 获取专辑歌曲的音质 | |
| 281 | 歌手动态信息 | |
| 282 | 最近听歌列表 | |
| 283 | 云盘导入歌曲 | |
| 284 | 获取客户端歌曲下载链接 - 新版 | |
| 285 | 当前账号关注的用户/歌手 | |
| 286 | 会员下载歌曲记录 | |
| 287 | 会员本月下载歌曲记录 | |
| 288 | 已购买单曲 | |
| 289 | 歌曲是否喜爱 | |
| 290 | 用户是否互相关注 | |
| 291 | 歌曲动态封面 | |
| 292 | 用户徽章 | |
| 293 | 用户状态 | |
| 294 | 用户状态 - 支持设置的状态 | |
| 295 | 用户状态 - 相同状态的用户 | |
| 296 | 用户状态 - 编辑 | |
| 297 | 听歌足迹 - 年度听歌足迹 | |
| 298 | 听歌足迹 - 今日收听 | |
| 299 | 听歌足迹 - 总收听时长 | |
| 300 | 听歌足迹 - 本周/本月收听时长 | |
| 301 | 听歌足迹 - 周/月/年收听报告 | |
| 302 | 歌单导入 - 元数据/文字/链接导入 | |
| 303 | 歌单导入 - 任务状态 | |
| 304 | 副歌时间 | |
| 305 | 相关歌单推荐 | |
| 306 | 歌词摘录 - 歌词摘录信息 | |
| 307 | 歌词摘录 - 我的歌词本 | |
| 308 | 歌词摘录 - 添加/修改摘录歌词 | |
| 309 | 歌词摘录 - 删除摘录歌词 | |
| 310 | 广播电台 - 分类/地区信息 | |
| 311 | 广播电台 - 我的收藏 | |
| 312 | 广播电台 - 电台信息 | |
| 313 | 广播电台 - 全部电台 | |
| 314 | 广播电台 - 收藏/取消收藏电台 | |
| 315 | 用户的创建歌单列表 | |
| 316 | 用户的收藏歌单列表 |
KouGouMusicLibrary/
│
├─ node_modules/
├─ package.json
├─ vcpkg-configuration.json
├─ vcpkg.json
├─ webpack.config.js # Webpack打包配置
├─ src/
│ ├─ js/
│ │ ├─ index.js # JS入口文件
│ │ ├─ axios_bridge.js # Axios桥接工具
│ │ └─ modulesDefinitions.js # 静态模块导出定义文件
│ ├─ c/
│ │ ├─ http.c # HTTP支持代码
│ │ ├─ kugou_music_api.c # 主要方法定义模块
│ │ ├─ main.c # 主程序入口
│ │ ├─ test.c # 测试代码
│ │ └─ tinythread.c # 线程支持(第三方)
│ └─ include/
│ ├─ app.bundle.h
│ ├─ kugou_music_api.h # API头文件
│ └─ tinycthread.h
│
├─ quickjs/ # QuickJS子模块(源码或预编译)
│
├─ build/ # 构建输出目录
│
├─ bundle/ # 打包产物(中间产物)
│ ├─ js/
│ │ └─ app.bundle.js # webpack 打包js产物
│ └─ c/
│ └─ app.bundle.c # qjsc 编译 js 生成的 c模块
│
├─ KuGouMucisApi/ # 酷狗音乐API node 服务 子模块
│
├─ vcpkg_installed/
│
├─ CMakeLists.txt # CMake主配置文件
│
└─ CMakePresets.json # CMake预设配置使用 Webpack 打包 JavaScript 文件:
pnpm i
npx webpack使用 CMake 构建 C 库:
cmake --preset windows-x64-vcpkg
cmake --build --preset windows-x64-vcpkg-Release --target qjsc # 手动构建qjsc依赖
cmake --build --preset windows-x64-vcpkg-Release- 线程安全性:
JSContext不能跨线程使用。 - 内存管理: 所有返回的字符串需要使用
free释放内存。 - 依赖管理: 确保正确安装
vcpkg和pnpm。
欢迎提交 Issue 和 Pull Request!