use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
use serde::{ Deserialize, Serialize };
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AudioStatusNumberData {
pub sid: i64,
pub play: i64,
pub collect: i64,
pub comment: i64,
pub share: i64,
}
impl BpiClient {
pub async fn audio_status_number(
&self,
sid: i64
) -> Result<BpiResponse<AudioStatusNumberData>, BpiError> {
self
.get("https://www.bilibili.com/audio/music-service-c/web/stat/song")
.query(&[("sid", sid.to_string())])
.send_bpi("查询歌曲状态数").await
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_audio_status_number() -> Result<(), Box<BpiError>> {
let bpi = BpiClient::new();
let result = bpi.audio_status_number(15664).await?;
let data = result.into_data()?;
tracing::info!("{:#?}", data);
assert_eq!(data.sid, 15664);
assert!(data.play >= 0);
assert!(data.collect >= 0);
assert!(data.comment >= 0);
assert!(data.share >= 0);
Ok(())
}
}