Skip to main content

bpi_rs/creativecenter/season/
aid.rs

1//! 根据 aid 反查合集信息 API
2//!
3//! [参考文档](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/creativecenter/season.md)
4
5use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
6use serde::{ Deserialize, Serialize };
7
8/// 合集信息
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct SeasonInfoData {
11    /// 合集 ID
12    pub id: u64,
13    /// 合集标题
14    pub title: String,
15    /// 合集描述
16    pub desc: Option<String>,
17    /// 合集封面 URL
18    pub cover: String,
19
20    /// 是否已完结
21    /// 0: 未完结 | 1: 已完结
22    #[serde(rename = "isEnd")]
23    pub is_end: u32,
24
25    /// 合集作者 ID
26    pub mid: u64,
27
28    /// 是否为活动合集
29    /// 0: 否 | 1: 是
30    #[serde(rename = "isAct")]
31    pub is_act: u32,
32
33    /// 是否付费
34    /// 0: 否 | 1: 是
35    pub is_pay: u32,
36
37    /// 合集状态
38    /// 0: 正常显示 | -6: 正在审核
39    pub state: i32,
40
41    /// 合集分段状态
42    /// 0: 正常
43    #[serde(rename = "partState")]
44    pub part_state: u32,
45
46    /// 合集签名状态
47    /// 0: 正常
48    #[serde(rename = "signState")]
49    pub sign_state: u32,
50
51    /// 合集拒绝原因
52    #[serde(rename = "rejectReason")]
53    pub reject_reason: Option<String>,
54
55    /// 创建时间 (UNIX 时间戳)
56    pub ctime: u64,
57    /// 修改时间 (UNIX 时间戳)
58    pub mtime: u64,
59
60    /// 是否设小节
61    /// 1: 不设小节
62    pub no_section: u32,
63
64    /// 合集是否禁止
65    /// 0: 否 | 1: 是
66    pub forbid: u32,
67
68    /// 协议 ID
69    pub protocol_id: Option<String>,
70
71    /// 视频数量
72    pub ep_num: u32,
73
74    /// 合集价格
75    /// 0: 免费
76    pub season_price: u32,
77
78    /// 是否公开
79    /// 1: 公开 | 0: 不公开
80    pub is_opened: u32,
81
82    /// 是否充电付费
83    /// 0: 否 | 1: 是
84    pub has_charging_pay: u32,
85
86    /// 是否 PUGV 付费
87    /// 0: 否 | 1: 是
88    pub has_pugv_pay: u32,
89}
90
91impl BpiClient {
92    /// 根据视频 aid 查询所属合集信息
93    ///
94    /// 通过视频 aid 查询该视频所属的合集信息。
95    ///
96    /// # 参数
97    /// | 名称 | 类型 | 说明 |
98    /// | ---- | ---- | ---- |
99    /// | `aid` | u64 | 视频 aid |
100    ///
101    /// # 文档
102    /// [根据 aid 反查合集信息](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/creativecenter/season/aid.md#根据-aid-反查合集信息)
103    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}