Skip to main content

ncm_api_rs/api/
audio_match.rs

1use super::Query;
2use crate::error::Result;
3/// 听歌识曲
4/// 对应 Node.js module/audio_match.js
5///
6/// 注意: Node.js 版本直接通过 axios GET 请求外部接口,
7/// Rust 版本同样直接发送 HTTP GET 请求。
8use crate::request::{ApiClient, ApiResponse};
9use serde_json::json;
10
11impl ApiClient {
12    /// 听歌识曲
13    /// 对应 /audio/match
14    pub async fn audio_match(&self, query: &Query) -> Result<ApiResponse> {
15        let duration = query.get_or("duration", "0");
16        let audio_fp = query.get_or("audioFP", "");
17        let encoded_fp = urlencoding::encode(&audio_fp);
18        let url = format!(
19            "https://interface.music.163.com/api/music/audio/match?sessionId=0123456789abcdef&algorithmCode=shazam_v2&duration={}&rawdata={}&times=1&decrypt=1",
20            duration, encoded_fp
21        );
22
23        let client = reqwest::Client::new();
24        let res = client.get(&url).send().await?;
25        let body: serde_json::Value = res.json().await?;
26
27        Ok(ApiResponse {
28            status: 200,
29            body: json!({
30                "code": 200,
31                "data": body.get("data").cloned().unwrap_or(json!(null)),
32            }),
33            cookie: vec![],
34        })
35    }
36}