bpi_rs/creativecenter/season/
aid.rs1use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
6use serde::{ Deserialize, Serialize };
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct SeasonInfoData {
11 pub id: u64,
13 pub title: String,
15 pub desc: Option<String>,
17 pub cover: String,
19
20 #[serde(rename = "isEnd")]
23 pub is_end: u32,
24
25 pub mid: u64,
27
28 #[serde(rename = "isAct")]
31 pub is_act: u32,
32
33 pub is_pay: u32,
36
37 pub state: i32,
40
41 #[serde(rename = "partState")]
44 pub part_state: u32,
45
46 #[serde(rename = "signState")]
49 pub sign_state: u32,
50
51 #[serde(rename = "rejectReason")]
53 pub reject_reason: Option<String>,
54
55 pub ctime: u64,
57 pub mtime: u64,
59
60 pub no_section: u32,
63
64 pub forbid: u32,
67
68 pub protocol_id: Option<String>,
70
71 pub ep_num: u32,
73
74 pub season_price: u32,
77
78 pub is_opened: u32,
81
82 pub has_charging_pay: u32,
85
86 pub has_pugv_pay: u32,
89}
90
91impl BpiClient {
92 pub async fn season_by_aid(&self, aid: u64) -> Result<BpiResponse<SeasonInfoData>, BpiError> {
104 self
105 .get("https://member.bilibili.com/x2/creative/web/season/aid")
106 .query(&[("id", aid.to_string())])
107 .send_bpi("根据 aid 查询合集").await
108 }
109}
110
111#[cfg(test)]
112mod tests {
113 use super::*;
114
115 const TEST_AID: u64 = 113602455409683;
116
117 #[tokio::test]
118 async fn test_season_by_aid() -> Result<(), Box<BpiError>> {
119 let bpi = BpiClient::new();
120
121 let data = bpi.season_by_aid(TEST_AID).await?.into_data()?;
122 tracing::info!("视频 {} 所属合集 {} - {}", TEST_AID, data.id, data.title);
123
124 Ok(())
125 }
126}