use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
use serde::{ Deserialize, Serialize };
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoDescResponse {
pub code: i32,
pub message: String,
pub ttl: i32,
pub data: String,
}
impl BpiClient {
pub async fn video_desc(
&self,
aid: Option<u64>,
bvid: Option<&str>
) -> Result<BpiResponse<String>, BpiError> {
let mut builder = self.get("http://api.bilibili.com/x/web-interface/archive/desc");
if let Some(aid) = aid {
builder = builder.query(&[("aid", aid.to_string())]);
}
if let Some(bvid) = bvid {
builder = builder.query(&[("bvid", bvid)]);
}
builder.send_bpi("获取稿件简介").await
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_video_desc() {
let bpi = BpiClient::new();
match bpi.video_desc(Some(10001), None).await {
Ok(resp) => {
if resp.code == 0 {
tracing::info!("稿件简介: {}", resp.data.unwrap());
} else {
tracing::info!("请求失败: code={}, message={}", resp.code, resp.message);
}
}
Err(err) => {
panic!("请求出错: {}", err);
}
}
}
}