Skip to main content

bpi_rs/danmaku/
thumbup.rs

1//! 弹幕点赞查询
2//!
3//! [查看 API 文档](https://github.com/Yuelioi/bilibili-API-collect/tree/cfc5fddcc8a94b74d91970bb5b4eaeb349addc47/docs/danmaku/thumbup.md)
4
5use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
6use serde::{ Deserialize, Serialize };
7use std::collections::HashMap;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct ThumbupStatsItem {
11    /// 对应弹幕所获得的点赞数
12    pub likes: i64,
13    /// 当前用户是否点赞
14    pub user_like: i32,
15    pub id_str: String,
16}
17
18pub type ThumbupStatsMap = HashMap<String, ThumbupStatsItem>;
19
20pub type ThumbupStatsResponse = BpiResponse<ThumbupStatsMap>;
21
22impl BpiClient {
23    /// 查询指定 dmid 的点赞状态与统计
24    pub async fn danmaku_thumbup_stats(
25        &self,
26        oid: i64,
27        ids: &[i64]
28    ) -> Result<ThumbupStatsResponse, BpiError> {
29        let ids_join = ids
30            .iter()
31            .map(|v| v.to_string())
32            .collect::<Vec<_>>()
33            .join(",");
34        let params = vec![("oid", oid.to_string()), ("ids", ids_join)];
35
36        let resp: ThumbupStatsResponse = self
37            .get("https://api.bilibili.com/x/v2/dm/thumbup/stats")
38            .query(&params)
39            .send_bpi("查询弹幕点赞状态").await?;
40
41        Ok(resp)
42    }
43}