1 unstable release

0.1.0 Apr 7, 2026

#397 in Audio

WTFPL license

400KB
9K SLoC

NCM API Rust SDK

网易云音乐 API Rust 原生实现

Rust Crates.io GitHub Release License Tokio

NeteaseCloudMusicApi Enhanced 移植的 Rust 原生 SDK,无需 Node.js 运行时


项目简介

本项目是 NeteaseCloudMusicApi Enhanced 的 Rust 原生实现。通过跨站请求伪造 (CSRF) 和伪造请求头,调用网易云音乐官方 API,提供与 Node.js 版本 1:1 对应的接口。

所有 API 方法统一使用 Query 对象传参,与 Node.js 版本保持一致的调用风格,同时充分利用 Rust 的类型安全和零成本抽象特性。

特点

  • 纯 Rust 实现 - 无需 Node.js 运行时,独立编译部署
  • 完整加密支持 - 完整实现 weapi / eapi / linuxapi 三种加密方式
  • 极低内存占用 - ~5MB vs Node.js ~50-100MB
  • 异步非阻塞 - 基于 tokio + reqwest 的异步请求
  • 300+ 开箱即用的 API 接口 - 与 Node.js 版本 1:1 对应
  • 模块化设计 - 每个 API 独立文件,易于扩展和维护
  • 统一的参数模式 - 所有接口使用 Query 对象传参,用法简洁一致
  • 代理支持 - 支持 HTTP / SOCKS5 代理
  • IP 伪装 - 支持 realIP 和 randomCNIP 功能
  • HTTP 服务模式 - 内置 Axum HTTP 服务器,可直接替代 Node.js 版提供 REST API

快速开始

安装

作为 Rust 库依赖

[dependencies]
ncm-api-rs = "0.1"
tokio = { version = "1", features = ["full"] }

或从 Git 安装最新版:

[dependencies]
ncm-api-rs = { git = "https://github.com/SPlayer-Dev/ncm-api-rs.git" }
tokio = { version = "1", features = ["full"] }

安装 HTTP 服务器

通过 cargo 安装:

cargo install ncm-api-rs --features server

或从 GitHub Releases 下载预编译二进制文件,支持以下平台:

平台 架构 文件
Linux x64 ncm-server-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
Linux ARM64 ncm-server-vX.X.X-aarch64-unknown-linux-gnu.tar.gz
macOS x64 ncm-server-vX.X.X-x86_64-apple-darwin.tar.gz
macOS Apple Silicon ncm-server-vX.X.X-aarch64-apple-darwin.tar.gz
Windows x64 ncm-server-vX.X.X-x86_64-pc-windows-msvc.zip

下载后解压即可运行:

# Linux / macOS
tar xzf ncm-server-*.tar.gz
./ncm-server

# Windows
# 解压 zip 后双击 ncm-server.exe 或在终端运行
ncm-server.exe

基础使用

use ncm_api_rs::{create_client, Query};

#[tokio::main]
async fn main() {
    // 创建客户端(不带 cookie)
    let client = create_client(None);

    // 搜索歌曲
    let query = Query::new()
        .param("keywords", "晴天 周杰伦")
        .param("type", "1")       // 1=歌曲
        .param("limit", "10");
    let result = client.cloudsearch(&query).await.unwrap();
    println!("{}", result.body);

    // 获取歌曲详情
    let query = Query::new().param("ids", "186016");
    let detail = client.song_detail(&query).await.unwrap();
    println!("{}", detail.body);

    // 获取歌词
    let query = Query::new().param("id", "186016");
    let lyric = client.lyric(&query).await.unwrap();
    println!("{}", lyric.body["lrc"]["lyric"]);

    // 获取播放链接
    let query = Query::new()
        .param("id", "186016")
        .param("level", "standard");
    let url = client.song_url_v1(&query).await.unwrap();
    println!("{}", url.body);
}
use ncm_api_rs::{create_client, Query};

#[tokio::main]
async fn main() {
    // 方式一:创建客户端时传入 cookie
    let client = create_client(Some("MUSIC_U=xxx; __csrf=xxx".to_string()));

    let query = Query::new();
    let songs = client.recommend_songs(&query).await.unwrap();

    // 方式二:在 Query 中传入 cookie(覆盖客户端 cookie)
    let query = Query::new().cookie("MUSIC_U=xxx; __csrf=xxx");
    let fm = client.personal_fm(&query).await.unwrap();
}

Query 参数说明

Query 是所有 API 的统一参数载体,支持链式调用:

let mut query = Query::new()
    // 业务参数 - 对应 Node.js 版本中 req.query 传入的参数
    .param("id", "186016")
    .param("limit", "30")
    .param("offset", "0")
    // 可选:覆盖 cookie
    .cookie("MUSIC_U=xxx");

// 可选:设置代理
query.proxy = Some("socks5://127.0.0.1:1080".to_string());
// 可选:设置真实 IP(伪装 X-Real-IP 请求头)
query.real_ip = Some("116.25.146.177".to_string());
// 可选:使用随机中国 IP
query.random_cn_ip = true;

// 读取参数
query.get("id");              // Some("186016")
query.get_or("limit", "30");  // "30"

调用前须知

本项目仅供学习使用,请尊重版权,请勿利用此项目从事商业行为或进行破坏版权行为

不要频繁调用登录接口,不然可能会被风控,登录状态还存在就不要重复调用登录接口

部分接口如登录接口不能调用太频繁,否则可能会触发 503 错误或者 IP 高频错误,若需频繁调用,需要准备 IP 代理池

由于网易限制,此项目在国外服务器或部分国内云服务上使用会受到限制,如 460 cheating异常,如需解决,可使用 real_ip 参数,传进国内 IP 解决

301 错误基本都是没登录就调用了需要登录的接口,如果登录了还是提示 301,基本都是 cookie 问题

登录接口返回的 ApiResponse 中包含 cookie 字段(Vec<String>),可以保存到本地后在后续请求中使用:

// 登录
let query = Query::new()
    .param("phone", "13xxx")
    .param("password", "xxx");
let result = client.login_cellphone(&query).await?;

// 保存 cookie
let cookies = result.cookie.join("; ");

// 后续请求使用 cookie
let query = Query::new().cookie(&cookies);
let account = client.user_account(&query).await?;

也可以直接从浏览器中获取 cookie 值,只需要其中 key 为 MUSIC_U 的数据即可:

let query = Query::new().cookie("MUSIC_U=xxxx");

realIP 参数

在国外服务器或 Vercel 等云服务上使用时,需要设置 real_ip 参数传入国内 IP:

let mut query = Query::new().param("id", "1969519579");
query.real_ip = Some("116.25.146.177".to_string());
let result = client.song_url_v1(&query).await?;

randomCNIP 参数

也可以使用随机中国 IP 功能,无需手动指定 IP:

let mut query = Query::new().param("id", "1969519579");
query.random_cn_ip = true;
let result = client.song_url_v1(&query).await?;

代理支持

在 Query 参数中设置 proxy 即可让该次请求使用代理:

let mut query = Query::new().param("id", "33894312");
query.proxy = Some("http://121.196.226.246:84".to_string());
// 也支持 socks5 代理
// query.proxy = Some("socks5://127.0.0.1:1080".to_string());
let result = client.song_url(&query).await?;

HTTP 服务模式

除了作为 Rust 库直接调用,本项目还支持以 HTTP 服务器模式运行,提供与 Node.js 版本完全兼容的 REST API 接口,前端可以无缝切换。

启动服务器

# 编译并运行(默认监听 0.0.0.0:3000)
cargo run --features server --bin ncm-server

# 或先编译再运行
cargo build --release --features server --bin ncm-server
./target/release/ncm-server

环境变量配置

变量名 说明 默认值
NCM_HOST 监听地址 0.0.0.0
NCM_PORT 监听端口 3000
CORS_ALLOW_ORIGIN CORS 允许的 Origin,支持逗号分隔多个源 *(允许所有)
# 示例:自定义端口和 CORS
NCM_HOST=127.0.0.1 NCM_PORT=8080 CORS_ALLOW_ORIGIN=http://localhost:5173 cargo run --features server --bin ncm-server

# 示例:允许多个源
CORS_ALLOW_ORIGIN=https://a.com,https://b.com cargo run --features server --bin ncm-server

前端调用示例

接口路径与 Node.js 版完全一致,方法名中的下划线 _ 转换为斜杠 /

// 搜索歌曲
const res = await axios.get('/cloudsearch', { params: { keywords: '海阔天空' } })

// 获取歌曲详情
const res = await axios.get('/song/detail', { params: { ids: '347230' } })

// POST 方式调用
const res = await axios.post('/login/cellphone', {
  phone: '138xxxx8000',
  password: 'xxx',
})

// 带 Cookie 调用需要登录的接口
const res = await axios.get('/user/playlist', {
  params: { uid: '32953014', cookie: 'MUSIC_U=xxx' },
})

路由映射规则

方法名 HTTP 路由 说明
song_detail /song/detail 下划线转斜杠(默认规则)
login_cellphone /login/cellphone 同上
daily_signin /daily_signin 特殊路由,保留下划线
fm_trash /fm_trash 特殊路由,保留下划线
personal_fm /personal_fm 特殊路由,保留下划线
avatar_upload /avatar/upload POST multipart/form-data
voice_upload /voice/upload POST multipart/form-data

所有路由均支持 GET 和 POST 两种请求方式(上传接口仅 POST)。

作为库集成到你的项目

如果你已有 Axum 项目,可以直接集成路由:

use ncm_api_rs::{create_client, server::{build_app, build_app_with_config, ServerConfig}};

// 方式一:快速构建
let app = build_app(create_client(None));

// 方式二:自定义配置
let config = ServerConfig {
    host: "127.0.0.1".to_string(),
    port: 8080,
    cors_origin: Some("http://localhost:5173".to_string()),
};
let app = build_app_with_config(create_client(None), &config);

// 启动
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?;
axum::serve(listener, app).await?;

自动路由注册

新增 API 时无需手动注册路由。build.rs 会在编译期自动扫描 src/api/mod.rs 中的模块声明,生成对应的路由注册代码。只需:

  1. 创建 src/api/xxx_yyy.rs 文件,实现 ApiClient 方法
  2. src/api/mod.rs 中添加 mod xxx_yyy;

路由 /xxx/yyy 会自动注册,无需其他操作。


API 文档

完整接口文档请查看 docs/API.md,涵盖全部接口的详细参数说明和调用示例。

接口速查表

登录相关
方法名 说明
login 邮箱登录
login_cellphone 手机号登录
login_qr_key 二维码 key 生成
login_qr_create 二维码生成
login_qr_check 二维码扫码状态
login_refresh 刷新登录
login_status 登录状态
logout 退出登录
register_anonimous 游客登录
register_cellphone 注册/修改密码
captcha_sent 发送验证码
captcha_verify 验证验证码
cellphone_existence_check 检测手机号是否注册
activate_init_profile 初始化昵称
nickname_check 重复昵称检测
rebind 更换绑定手机
用户相关
方法名 说明
user_detail 用户详情
user_detail_new 用户详情(新)
user_account 账号信息
user_subcount 收藏计数
user_level 用户等级
user_binding 绑定信息
user_bindingcellphone 绑定手机
user_replacephone 更换手机
user_update 更新用户信息
user_playlist 用户歌单
user_playlist_create 创建歌单列表
user_playlist_collect 收藏歌单列表
user_follows 关注列表
user_followeds 粉丝列表
user_follow_mixed 关注的用户/歌手
user_mutualfollow_get 是否互相关注
user_event 用户动态
user_record 播放记录
user_dj 用户电台
user_audio 用户音频
user_comment_history 历史评论
user_medal 用户徽章
user_social_status 用户状态
user_social_status_edit 编辑状态
user_social_status_rcmd 相同状态用户
user_social_status_support 支持的状态
follow 关注/取消关注
pl_count 私信和通知数量
countries_code_list 国家编码列表
setting 用户设置
get_userids 获取用户 ID
avatar_upload 上传头像
歌曲相关
方法名 说明
song_detail 歌曲详情
song_url 歌曲播放链接
song_url_v1 歌曲播放链接(新)
song_url_v1_302 302 重定向到歌曲 URL
song_url_ncmget NCM 获取歌曲 URL
song_url_match 歌曲解锁匹配
song_download_url 歌曲下载链接
song_download_url_v1 歌曲下载链接(新)
check_music 音乐是否可用
lyric 歌词
lyric_new 逐字歌词
like 喜欢音乐
song_like 喜欢歌曲(新版)
likelist 喜欢的音乐列表
song_like_check 歌曲是否喜爱
scrobble 听歌打卡
song_order_update 调整歌曲顺序
song_chorus 副歌时间
song_wiki_summary 歌曲百科
song_music_detail 歌曲音质详情
song_red_count 红心数量
song_dynamic_cover 动态封面
song_downlist 会员下载记录
song_monthdownlist 本月下载记录
song_singledownlist 已购买单曲
song_purchased 已购买歌曲
song_lyrics_mark 歌词摘录信息
song_lyrics_mark_add 添加歌词摘录
song_lyrics_mark_del 删除歌词摘录
song_lyrics_mark_user_page 我的歌词本
audio_match 听歌识曲
搜索相关
方法名 说明
search 搜索
cloudsearch 搜索(更全)
search_default 默认搜索关键词
search_hot 热搜列表(简略)
search_hot_detail 热搜列表(详细)
search_suggest 搜索建议
search_suggest_pc 搜索建议(PC端)
search_multimatch 搜索多重匹配
search_match 搜索匹配
歌单相关
方法名 说明
playlist_create 新建歌单
playlist_delete 删除歌单
playlist_subscribe 收藏/取消收藏歌单
playlist_subscribers 歌单收藏者
playlist_detail 歌单详情
playlist_detail_dynamic 歌单详情动态
playlist_detail_rcmd_get 相关歌单推荐
playlist_track_all 歌单所有歌曲
playlist_tracks 添加/删除歌曲
playlist_track_add 收藏视频到歌单
playlist_track_delete 删除歌单视频
playlist_update 更新歌单
playlist_desc_update 更新歌单描述
playlist_name_update 更新歌单名
playlist_tags_update 更新歌单标签
playlist_cover_update 歌单封面上传
playlist_order_update 调整歌单顺序
playlist_update_playcount 更新播放量
playlist_catlist 歌单分类
playlist_hot 热门歌单分类
playlist_category_list 歌单分类列表
playlist_highquality_tags 精品歌单标签
playlist_privacy 歌单隐私设置
playlist_mylike 我喜欢的歌单
playlist_video_recent 最近播放视频
playlist_import_name_task_create 歌单导入
playlist_import_task_status 导入任务状态
related_playlist 相关歌单
评论相关
方法名 说明
comment_music 歌曲评论
comment_album 专辑评论
comment_playlist 歌单评论
comment_mv MV 评论
comment_dj 电台节目评论
comment_video 视频评论
comment_event 动态评论
comment_floor 楼层评论
comment_hot 热门评论
comment_like 点赞评论
comment_new 新版评论
comment_reply 回复评论
comment_delete 删除评论
comment_hug_list 抱一抱列表
comment_info_list 评论统计
hug_comment 抱一抱评论
starpick_comments_summary 精选评论摘要
歌手相关
方法名 说明
artists 歌手信息
artist_detail 歌手详情
artist_detail_dynamic 歌手详情动态
artist_songs 歌手全部歌曲
artist_album 歌手专辑
artist_desc 歌手描述
artist_mv 歌手 MV
artist_list 歌手分类列表
artist_sub 收藏/取消收藏歌手
artist_sublist 收藏的歌手列表
artist_top_song 歌手热门歌曲
artist_fans 歌手粉丝
artist_follow_count 歌手关注数
artist_new_mv 关注歌手新 MV
artist_new_song 关注歌手新歌
artist_video 歌手视频
专辑相关
方法名 说明
album 专辑内容
album_detail 专辑详情
album_detail_dynamic 专辑动态信息
album_sub 收藏/取消收藏专辑
album_sublist 已收藏专辑列表
album_newest 最新专辑
album_new 新碟上架
album_list 数字专辑列表
album_list_style 专辑风格列表
album_privilege 专辑歌曲音质
album_songsaleboard 专辑销量榜
MV 相关
方法名 说明
mv_all 全部 MV
mv_first 最新 MV
mv_exclusive_rcmd 网易出品 MV
mv_detail MV 数据
mv_detail_info MV 点赞转发评论数
mv_url MV 地址
mv_sub 收藏/取消收藏 MV
mv_sublist 收藏的 MV 列表
personalized_mv 推荐 MV
top_mv MV 排行
视频相关
方法名 说明
video_group_list 视频标签列表
video_category_list 视频分类列表
video_group 标签下的视频
video_timeline_all 全部视频列表
video_timeline_recommend 推荐视频
video_detail 视频详情
video_detail_info 视频点赞转发评论数
video_url 视频播放地址
video_sub 收藏视频
related_allvideo 相关视频
mlog_url Mlog 地址
mlog_to_video Mlog 转视频
mlog_music_rcmd Mlog 音乐推荐
电台相关
方法名 说明
dj_banner 电台 banner
dj_personalize_recommend 电台个性推荐
dj_subscriber 电台订阅者列表
dj_catelist 电台分类列表
dj_category_excludehot 非热门电台分类
dj_category_recommend 电台分类推荐
dj_detail 电台详情
dj_hot 热门电台
dj_radio_hot 电台 - 类别热门
dj_program 电台节目列表
dj_program_detail 电台节目详情
dj_program_toplist 节目排行榜
dj_program_toplist_hours 节目24小时榜
dj_recommend 电台推荐
dj_recommend_type 电台推荐类型
dj_sub 订阅/取消订阅电台
dj_sublist 订阅的电台列表
dj_toplist 电台排行榜
dj_toplist_hours 电台24小时榜
dj_toplist_newcomer 电台新人榜
dj_toplist_pay 付费电台榜
dj_toplist_popular 电台热门榜
dj_difm_all_style_channel DIFM电台 - 分类
dj_difm_channel_subscribe DIFM电台 - 收藏频道
dj_difm_channel_unsubscribe DIFM电台 - 取消收藏频道
dj_difm_playing_tracks_list DIFM电台 - 播放列表
dj_difm_subscribe_channels_get DIFM电台 - 收藏列表
dj_paygift 付费精品
dj_today_perfered 今日优选
dj_radio_top 电台排行
推荐相关
方法名 说明
personalized 推荐歌单
personalized_newsong 推荐新音乐
personalized_djprogram 推荐电台
personalized_privatecontent 独家放送(入口)
personalized_privatecontent_list 独家放送列表
recommend_songs 每日推荐歌曲
recommend_resource 每日推荐歌单
recommend_songs_dislike 不喜欢推荐
history_recommend_songs 历史日推
history_recommend_songs_detail 历史日推详情
program_recommend 推荐节目
homepage_block_page 首页-发现
homepage_dragon_ball 首页圆形图标入口
banner 首页 Banner
daily_signin 每日签到
personal_fm 私人 FM
personal_fm_mode 私人 FM 模式
fm_trash 垃圾桶
playmode_intelligence_list 心动模式/智能播放
playmode_song_vector 随机播放模式
simi_song 相似歌曲
simi_artist 相似歌手
simi_playlist 相似歌单
simi_mv 相似 MV
simi_user 相似用户
排行榜相关
方法名 说明
toplist 所有榜单
toplist_detail 所有榜单摘要
toplist_detail_v2 所有榜单摘要 v2
toplist_artist 歌手榜
top_song 新歌速递
top_album 新碟上架
top_artists 热门歌手
top_mv MV 排行
top_playlist 歌单(网友精选碟)
top_playlist_highquality 精品歌单
top_list 排行榜详情
云盘相关
方法名 说明
user_cloud 云盘数据
user_cloud_detail 云盘数据详情
user_cloud_del 云盘歌曲删除
cloud 云盘上传
cloud_import 云盘导入
cloud_match 云盘歌曲匹配纠正
cloud_lyric_get 云盘歌词
cloud_upload_token 上传凭证
cloud_upload_complete 完成上传
私信/动态相关
方法名 说明
msg_private 私信列表
msg_private_history 私信历史
msg_comments 评论通知
msg_forwards 转发通知
msg_notices 通知消息
msg_recentcontact 最近联系人
send_text 发送文本私信
send_song 发送歌曲私信
send_playlist 发送歌单私信
send_album 发送专辑私信
share_resource 分享到动态
resource_like 资源点赞
event 动态列表
event_del 删除动态
event_forward 转发动态
VIP/会员
方法名 说明
vip_info VIP 信息
vip_info_v2 VIP 信息 v2
vip_sign 黑胶乐签打卡
vip_sign_info 打卡信息
vip_tasks VIP 任务列表
vip_timemachine 时光机
vip_growthpoint 成长值基本信息
vip_growthpoint_details 成长值明细
vip_growthpoint_get 领取成长值奖励
云贝
方法名 说明
yunbei 云贝签到信息
yunbei_info 云贝信息
yunbei_sign 云贝签到
yunbei_today 今日云贝
yunbei_expense 云贝支出
yunbei_receipt 云贝收入
yunbei_tasks 云贝任务
yunbei_tasks_todo 待完成任务
yunbei_task_finish 完成任务
yunbei_rcmd_song 云贝推歌
yunbei_rcmd_song_history 推歌历史
听歌足迹
方法名 说明
listen_data_year_report 年度听歌足迹
listen_data_today_song 今日收听
listen_data_total 总收听时长
listen_data_realtime_report 本周/本月时长
listen_data_report 收听报告
recent_listen_list 最近听歌列表
record_recent_song 最近播放歌曲
record_recent_album 最近播放专辑
record_recent_playlist 最近播放歌单
record_recent_dj 最近播放电台
record_recent_video 最近播放视频
record_recent_voice 最近播放声音
风格/曲风
方法名 说明
style_list 曲风列表
style_detail 曲风详情
style_song 曲风歌曲
style_album 曲风专辑
style_artist 曲风歌手
style_playlist 曲风歌单
style_preference 曲风偏好
数字专辑
方法名 说明
digital_album_detail 数字专辑详情
digital_album_ordering 购买数字专辑
digital_album_purchased 已购数字专辑
digital_album_sales 数字专辑销量
声音/播客
方法名 说明
voice_upload 上传音频
voice_delete 删除音频
voice_detail 音频详情
voice_lyric 音频歌词
voicelist_list 声音列表
voicelist_detail 声音列表详情
voicelist_my_created 我创建的播客声音
voicelist_search 搜索声音列表
voicelist_list_search 搜索声音
voicelist_trans 声音转换
音乐人
方法名 说明
musician_sign 音乐人签到
musician_tasks 音乐人任务
musician_tasks_new 音乐人新任务
musician_vip_tasks VIP 任务
musician_data_overview 数据概览
musician_play_trend 播放趋势
musician_cloudbean 云豆数量
musician_cloudbean_obtain 领取云豆
粉丝中心
方法名 说明
fanscenter_overview_get 粉丝中心概览
fanscenter_trend_list 粉丝趋势
fanscenter_basicinfo_age_get 年龄分布
fanscenter_basicinfo_gender_get 性别分布
fanscenter_basicinfo_province_get 省份分布
UGC 百科
方法名 说明
ugc_song_get 歌曲百科
ugc_artist_get 歌手百科
ugc_album_get 专辑百科
ugc_mv_get MV 百科
ugc_detail 百科详情
ugc_artist_search 搜索歌手百科
ugc_user_devote 用户贡献
一起听
方法名 说明
listentogether_room_create 创建房间
listentogether_room_check 检查房间
listentogether_accept 接受邀请
listentogether_status 房间状态
listentogether_heatbeat 心跳
listentogether_play_command 播放指令
listentogether_sync_list_command 同步列表指令
listentogether_sync_playlist_get 获取同步歌单
listentogether_end 结束房间
广播电台
方法名 说明
broadcast_category_region_get 分类/地区信息
broadcast_channel_list 全部电台
broadcast_channel_currentinfo 电台信息
broadcast_channel_collect_list 我的收藏
broadcast_sub 收藏/取消电台
其他
方法名 说明
hot_topic 热门话题
topic_detail 话题详情
topic_detail_event_hot 话题热门动态
topic_sublist 收藏的专栏
calendar 音乐日历
batch 批量请求
api 通用 API 代理
inner_version 内部版本号
weblog 日志上报
eapi_decrypt EAPI 解密
sign_happy_info 乐签信息
signin_progress 签到进度
summary_annual 年度总结
threshold_detail_get 达人认证门槛
creator_authinfo_get 创作者认证信息
sheet_list 乐谱列表
sheet_preview 乐谱预览
aidj_content_rcmd AI DJ 推荐
music_first_listen_info 回忆坐标
verify_get_qr 验证二维码
verify_qrcodestatus 二维码状态

扩展接口

src/api/ 中添加新文件即可,模式非常简单:

// src/api/your_new_api.rs
use crate::request::{ApiClient, ApiResponse, CryptoType};
use crate::error::Result;
use serde_json::json;
use super::Query;

impl ApiClient {
    pub async fn your_new_api(&self, query: &Query) -> Result<ApiResponse> {
        let data = json!({
            "id": query.get_or("id", ""),
        });
        self.request("/api/your/endpoint", data, query.to_option(CryptoType::Weapi)).await
    }
}

然后在 src/api/mod.rs 中注册:

mod your_new_api;

对应的 Node.js 接口参考 NeteaseCloudMusicApi Enhancedmodule/ 目录。

致谢

License

WTFPL - Do What The Fuck You Want To Public License

Dependencies

~11–21MB
~371K SLoC