use crate::video::video_zone_v2::VideoPartitionV2;
use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
use serde::{ Deserialize, Serialize };
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RegionBanner {
pub image: String, pub title: String, pub sub_title: String, pub url: String, pub rid: i64, }
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RegionBannerData {
pub region_banner_list: Vec<RegionBanner>, }
impl BpiClient {
pub async fn web_widget_region_banner(
&self,
region_id: VideoPartitionV2
) -> Result<BpiResponse<RegionBannerData>, BpiError> {
let query = vec![("region_id", region_id.tid().to_string())];
self
.get("https://api.bilibili.com/x/web-show/region/banner")
.query(&query)
.send_bpi("获取各分区的轮播图").await
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::video::video_zone_v2::{ Douga, VideoPartitionV2 };
use tracing::info;
#[tokio::test]
async fn test_get_region_banner() {
let bpi = BpiClient::new();
let resp = bpi.web_widget_region_banner(VideoPartitionV2::Douga(Douga::Douga)).await;
info!("响应: {:?}", resp);
assert!(resp.is_ok());
let data = resp.unwrap().data.unwrap();
info!("分区轮播图: {:?}", data);
}
}