Skip to main content

video_info/
video_info.rs

1//! 读取视频基础信息、分 P 列表和简介。
2//!
3//! ```powershell
4//! $env:BPI_VIDEO_BVID = "BV1xx411c7mD"
5//! cargo run --example video_info --features video
6//! ```
7
8use 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}