Skip to main content

bpi_rs/search/
result.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
4pub struct SearchData<T> {
5    pub seid: String,
6    pub page: i64,
7    #[serde(rename = "pagesize")]
8    pub page_size: i64,
9    #[serde(rename = "numResults")]
10    pub num_results: i64,
11    #[serde(rename = "numPages")]
12    pub num_pages: i64,
13
14    /// 搜索类型为直播间及主播时:obj
15    //  搜索类型为其他时:array
16    pub result: Option<T>,
17
18    /// 只在搜索类型为直播间及主播有效
19    pageinfo: Option<PageInfo>,
20}
21
22#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
23pub struct PageInfo {
24    pub live_user: LivePageInfo,
25    pub live_room: LivePageInfo,
26}
27
28#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
29pub struct LivePageInfo {
30    pub total: i64,
31    #[serde(rename = "numResults")]
32    pub num_results: i64,
33    pub pages: i64,
34    #[serde(rename = "numPages")]
35    pub num_pages: i64,
36}
37
38#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
39pub struct Article {
40    pub category_id: i64,
41    pub category_name: String,
42    pub comment_url: String,
43    pub desc: String,
44    pub id: i64,
45    pub image_urls: Vec<String>,
46    pub is_comment: i64,
47    pub is_fold: bool,
48    pub is_rk1: bool,
49    pub like: i64,
50    pub mid: i64,
51    pub pub_time: i64,
52    pub rank_index: i64,
53    pub rank_offset: i64,
54    pub reply: i64,
55    pub spread_id: i64,
56    pub sub_type: i64,
57    pub template_id: i64,
58    pub title: String,
59    #[serde(rename = "type")]
60    pub type_field: String,
61    pub version: String,
62    pub view: i64,
63}
64
65#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
66pub struct Bangumi {
67    #[serde(rename = "type")]
68    pub type_field: String,
69    pub media_id: i64,
70    pub title: String,
71    pub org_title: String,
72    pub media_type: i64,
73    pub cv: String,
74    pub staff: String,
75    pub season_id: i64,
76    pub is_avid: bool,
77    pub hit_epids: String,
78    pub season_type: i64,
79    pub season_type_name: String,
80    pub selection_style: String,
81    pub ep_size: i64,
82    pub url: String,
83    pub button_text: String,
84    pub is_follow: i64,
85    pub is_selection: i64,
86    pub eps: Vec<Ep>,
87    pub badges: Vec<Badge>,
88    pub cover: String,
89    pub areas: String,
90    pub styles: String,
91    pub goto_url: String,
92    pub desc: String,
93    pub pubtime: i64,
94    pub media_mode: i64,
95    pub fix_pubtime_str: String,
96    pub media_score: MediaScore,
97    pub display_info: Vec<Badge>,
98    pub pgc_season_id: i64,
99    pub corner: i64,
100    pub index_show: String,
101}
102
103#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
104pub struct Ep {
105    pub id: i64,
106    pub cover: String,
107    pub title: String,
108    pub url: String,
109    pub release_date: String,
110    pub badges: Vec<Badge>,
111    pub index_title: String,
112    pub long_title: String,
113}
114
115#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
116pub struct Badge {
117    pub text: String,
118    pub text_color: String,
119    pub text_color_night: String,
120    pub bg_color: String,
121    pub bg_color_night: String,
122    pub border_color: String,
123    pub border_color_night: String,
124    pub bg_style: i64,
125}
126
127#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
128pub struct MediaScore {
129    pub score: f32,
130    pub user_count: i64,
131}
132
133/// 视频信息结构体
134#[derive(Debug, Serialize, Deserialize, Clone)]
135pub struct Video {
136    /// 视频类型
137    pub r#type: String,
138
139    /// 视频ID 也就是aid
140    pub id: u64,
141
142    /// 作者昵称
143    pub author: String,
144
145    /// 作者mid
146    pub mid: u64,
147
148    /// 视频分区ID
149    pub typeid: String,
150
151    /// 视频分区名称
152    pub typename: String,
153
154    /// 视频链接
155    pub arcurl: String,
156
157    /// 视频aid
158    pub aid: u64,
159
160    /// 视频bvid
161    pub bvid: String,
162
163    /// 视频标题
164    pub title: String,
165
166    /// 封面图
167    pub pic: String,
168
169    /// 播放量
170    pub play: u64,
171
172    /// 弹幕数量
173    pub danmaku: u64,
174
175    /// 收藏数量
176    pub favorites: u64,
177
178    /// 点赞数量
179    pub like: u64,
180
181    /// 视频标签
182    pub tag: String,
183
184    /// 评论数
185    pub review: u64,
186
187    /// 发布时间 (时间戳)
188    pub pubdate: u64,
189
190    /// 视频时长 (格式: mm:ss)
191    pub duration: String,
192}
193
194#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
195pub struct Movie {
196    #[serde(rename = "type")]
197    pub type_field: String,
198    pub media_id: i64,
199    pub title: String,
200    pub org_title: String,
201    pub media_type: i64,
202    pub cv: String,
203    pub staff: String,
204    pub season_id: i64,
205    pub is_avid: bool,
206    pub hit_epids: String,
207    pub season_type: i64,
208    pub season_type_name: String,
209    pub selection_style: String,
210    pub ep_size: i64,
211    pub url: String,
212    pub button_text: String,
213    pub is_follow: i64,
214    pub is_selection: i64,
215    pub badges: Vec<Badge>,
216    pub cover: String,
217    pub areas: String,
218    pub styles: String,
219    pub goto_url: String,
220    pub desc: String,
221    pub pubtime: i64,
222    pub media_mode: i64,
223    pub fix_pubtime_str: String,
224    pub media_score: MediaScore,
225    pub display_info: Vec<Badge>,
226    pub pgc_season_id: i64,
227    pub corner: i64,
228    pub index_show: String,
229}
230
231#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
232pub struct LiveData {
233    live_room: Vec<LiveRoom>,
234    live_user: Vec<LiveUser>,
235}
236
237#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
238pub struct LiveUser {
239    /// 所在分区ID
240    pub area: i64,
241    /// 所在分区v2 ID
242    pub area_v2_id: i64,
243    /// 关注数
244    pub attentions: i64,
245    /// 分区名称
246    pub cate_name: String,
247    /// 命中列
248    pub hit_columns: Vec<String>,
249    /// 是否正在直播
250    pub is_live: bool,
251    /// 直播状态
252    pub live_status: i64,
253    /// 直播开始时间
254    pub live_time: String,
255    /// 排名索引
256    pub rank_index: i64,
257    /// 排名偏移
258    pub rank_offset: i64,
259    /// 直播间ID
260    #[serde(rename = "roomid")]
261    pub room_id: i64,
262    /// 标签
263    pub tags: String,
264    /// 类型字段
265    #[serde(rename = "type")]
266    pub type_field: String,
267    /// 头像
268    pub uface: String,
269    /// 用户ID
270    pub uid: i64,
271    /// 用户名
272    pub uname: String,
273    /// 可选字段:仅 LiveUser2 有的 id
274    pub id: Option<i64>,
275}
276
277#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
278pub struct LiveRoom {
279    /// 所在分区ID
280    pub area: i64,
281
282    /// 关注数
283    pub attentions: i64,
284
285    /// 分区名称
286    pub cate_name: String,
287
288    /// 封面图
289    pub cover: String,
290
291    /// 是否直播间内联
292    pub is_live_room_inline: i64,
293
294    /// 直播状态
295    pub live_status: i64,
296
297    /// 直播时间
298    pub live_time: String,
299
300    /// 当前在线人数
301    pub online: i64,
302
303    /// 排名索引
304    pub rank_index: i64,
305
306    /// 排名偏移
307    pub rank_offset: i64,
308
309    /// 房间ID
310    pub roomid: i64,
311
312    /// 短ID
313    pub short_id: i64,
314
315    /// 标签
316    pub tags: String,
317
318    /// 标题
319    pub title: String,
320
321    /// 类型字段
322    #[serde(rename = "type")]
323    pub type_field: String,
324
325    /// 头像
326    pub uface: String,
327
328    /// 用户ID
329    pub uid: i64,
330
331    /// 用户名
332    pub uname: String,
333
334    /// 用户封面
335    pub user_cover: String,
336
337    /// 仅 type = live 有的字段
338    pub watched_show: Option<WatchedShow>,
339}
340
341#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
342pub struct WatchedShow {
343    pub switch: bool,
344    pub num: i64,
345    pub text_small: String,
346    pub text_large: String,
347    pub icon: String,
348    pub icon_location: String,
349    pub icon_web: String,
350}
351
352#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
353pub struct OfficialVerify {
354    #[serde(rename = "type")]
355    pub r#type: i64,
356    pub desc: String,
357}
358
359#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
360pub struct BiliUserVideo {
361    pub aid: i64,
362    pub bvid: String,
363    pub title: String,
364    pub pubdate: i64,
365    pub arcurl: String,
366    pub pic: String,
367    pub play: String,
368    pub dm: i64,
369    pub coin: i64,
370    pub fav: i64,
371    pub desc: String,
372    pub duration: String,
373    pub is_pay: i64,
374    pub is_union_video: i64,
375    pub is_charge_video: i64,
376    pub vt: i64,
377    pub enable_vt: i64,
378    pub vt_display: String,
379}
380
381#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
382pub struct BiliUser {
383    #[serde(rename = "type")]
384    pub r#type: String,
385    pub mid: i64,
386    pub uname: String,
387    pub usign: String,
388    pub fans: i64,
389    pub videos: i64,
390    pub upic: String,
391    pub face_nft: i64,
392    pub face_nft_type: i64,
393    pub verify_info: String,
394    pub level: i64,
395    pub gender: i64,
396    pub is_upuser: i64,
397    pub is_live: i64,
398    pub room_id: i64,
399    pub res: Vec<BiliUserVideo>,
400    pub official_verify: OfficialVerify,
401    pub is_senior_member: i64,
402}