1use bpi_rs::ids::Bvid;
9use bpi_rs::video::{VideoDescParams, VideoPageListParams, VideoViewParams};
10use bpi_rs::{BpiClient, BpiResult};
11
12const DEFAULT_BVID: &str = "BV1xx411c7mD";
13
14fn video_bvid() -> BpiResult<Bvid> {
15 std::env::var("BPI_VIDEO_BVID")
16 .unwrap_or_else(|_| DEFAULT_BVID.to_string())
17 .parse()
18}
19
20#[tokio::main]
21async fn main() -> BpiResult<()> {
22 let bvid = video_bvid()?;
23 let client = BpiClient::new()?;
24 let video = client.video();
25
26 let view = video.view(VideoViewParams::from_bvid(bvid.clone())).await?;
27 println!(
28 "视频: {} ({}) UP={} 播放={} 点赞={}",
29 view.title, view.bvid, view.owner.name, view.stat.view, view.stat.like
30 );
31
32 let pages = video
33 .page_list(VideoPageListParams::from_bvid(bvid.clone()))
34 .await?;
35 println!("分 P 数: {}", pages.len());
36 for page in pages.iter().take(5) {
37 println!(" P{} cid={} {}", page.page, page.cid, page.part);
38 }
39
40 let desc = video.desc(VideoDescParams::from_bvid(bvid)).await?;
41 let first_line = desc.lines().next().unwrap_or("");
42 println!("简介首行: {first_line}");
43
44 Ok(())
45}