Skip to main content

ncm_api_rs/api/
cloud.rs

1use super::Query;
2use crate::error::Result;
3/// 云盘上传
4/// 对应 Node.js module/cloud.js
5///
6/// 注意:Node.js 版本的 cloud.js 是一个复杂的多步骤上传流程
7/// (检查 -> 解析元数据 -> 获取 token -> 上传 -> 提交信息 -> 发布)。
8/// Rust SDK 将其拆分为独立的步骤接口(cloud_upload_token、cloud_upload_complete 等),
9/// 此方法仅实现第一步:上传检查。
10use crate::request::{ApiClient, ApiResponse, CryptoType};
11use serde_json::json;
12
13impl ApiClient {
14    /// 云盘上传检查
15    /// 对应 /cloud(上传检查步骤)
16    pub async fn cloud_upload_check(&self, query: &Query) -> Result<ApiResponse> {
17        let data = json!({
18            "bitrate": query.get_or("bitrate", "999000"),
19            "ext": query.get_or("ext", ""),
20            "length": query.get_or("length", "0").parse::<i64>().unwrap_or(0),
21            "md5": query.get_or("md5", ""),
22            "songId": query.get_or("songId", "0"),
23            "version": 1
24        });
25        self.request(
26            "/api/cloud/upload/check",
27            data,
28            query.to_option(CryptoType::default()),
29        )
30        .await
31    }
32
33    /// 云盘上传信息提交
34    /// 对应 /cloud(信息提交步骤)
35    pub async fn cloud_upload_info(&self, query: &Query) -> Result<ApiResponse> {
36        let data = json!({
37            "md5": query.get_or("md5", ""),
38            "songid": query.get_or("songId", ""),
39            "filename": query.get_or("filename", ""),
40            "song": query.get_or("song", ""),
41            "album": query.get_or("album", "未知专辑"),
42            "artist": query.get_or("artist", "未知艺术家"),
43            "bitrate": query.get_or("bitrate", "999000"),
44            "resourceId": query.get_or("resourceId", "")
45        });
46        self.request(
47            "/api/upload/cloud/info/v2",
48            data,
49            query.to_option(CryptoType::default()),
50        )
51        .await
52    }
53
54    /// 云盘歌曲发布
55    /// 对应 /cloud(发布步骤)
56    pub async fn cloud_publish(&self, query: &Query) -> Result<ApiResponse> {
57        let data = json!({
58            "songid": query.get_or("songId", "")
59        });
60        self.request(
61            "/api/cloud/pub/v2",
62            data,
63            query.to_option(CryptoType::default()),
64        )
65        .await
66    }
67}