1use crate::{BilibiliRequest, BpiClient, BpiError, BpiResponse};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize, Serialize)]
9pub struct NameUidItem {
10 pub name: String,
12 pub uid: String,
14}
15
16#[derive(Debug, Clone, Deserialize, Serialize)]
18pub struct NameToUidData {
19 pub uid_list: Vec<NameUidItem>,
20}
21
22impl BpiClient {
23 pub async fn user_name_to_uid(
30 &self,
31 names: &[&str],
32 ) -> Result<BpiResponse<NameToUidData>, BpiError> {
33 let names_str = names.join(",");
34
35 self.get("https://api.bilibili.com/x/polymer/web-dynamic/v1/name-to-uid")
36 .query(&[("names", names_str)])
37 .send_bpi("用户名查 UID")
38 .await
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45 use tracing::info;
46
47 #[tokio::test]
48 async fn test_user_name_to_uid() {
49 let bpi = BpiClient::new();
50 let resp = bpi.user_name_to_uid(&["LexBurner", "某科学"]).await;
51 assert!(resp.is_ok());
52 if let Ok(r) = resp {
53 info!("用户名查 UID 返回: {:?}", r);
54 }
55 }
56}