#vndb #api-wrapper #anime #api #api-request #vn #visualnovel

vndb-api

功能齐全的视觉小说数据库 (VNDB) HTTPS API 包装器

8 个版本 (4 个稳定版)

1.0.3 2024年7月17日
0.2.0 2024年7月9日
0.1.2 2024年7月5日
0.1.1 2024年7月4日
0.1.0 2024年7月4日

网络编程 中排名 1149

Download history 132/week @ 2024-06-28 252/week @ 2024-07-05 368/week @ 2024-07-12 60/week @ 2024-07-19 30/week @ 2024-07-26 6/week @ 2024-08-02

每月下载量 475

MIT 许可证

88KB
2.5K SLoC

示例

use dotenvy::dotenv;
use std::env;

use vndb_api::client::VndbApiClient;
use vndb_api::request::query::{QueryBuilder, VnQuery, VnField, VnFieldChoices, SortField};

#[tokio::main]
async fn main() {
    dotenv().ok();
    let api_key = env::var("API_KEY").expect("API_KEY must be set");
    let api_client = VndbApiClient::new(&String::from(api_key));

    // For more examples see the ["examples" directory]
    //      (https://github.com/demeil1/vndb-api/tree/main/examples) 
    // in the github repo

    // search for visual novel by name with autocomplete options
    let query = QueryBuilder::<VnQuery>::new()
        .filters(&r#"["search", "=", "DDLC"]"#.to_string())
        .fields(VnFieldChoices::from(vec![VnField::Title]))
        .results(3)
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            response.results.iter()
                .for_each(|vn| {
                    println!("{}", vn.title.as_ref().unwrap());
                });
        }
        Err(error) => {
            eprintln!("{:#?}", error);
        }
    }

    // prints the name and rating for the top 3 visual novels on the site
    let query = QueryBuilder::<VnQuery>::new()
        .fields(VnFieldChoices::all())
        .sort(SortField::Rating)
        .results(3)
        .page(1)
        .reverse()
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            response.results.iter()
                .for_each(|vn| {
                    println!("{}: {}", vn.title.as_ref().unwrap(), vn.rating.unwrap());
                });
        }
        Err(error) => eprintln!("{:#?}", error),
    }

    // using complex filters
    let filters = r#"
        [ "and"
            , [ "or"
                , [ "olang", "!=", "en" ]
                , [ "olang", "!=", "ja" ]
            ]
            , [ "released", ">=", "2020-01-01" ]
        ]
    "#.to_string();
    let query = QueryBuilder::<VnQuery>::new()
        .filters(&filters)
        .results(10)
        .page(1)
        .build();
    match api_client.vn_search(&query).await {
        Ok(response) => {
            println!("{:#?}", response);
        }
        Err(error) => { eprintln!("{:#?}", error); }
    }
}

VNDB

此 crate 允许从 VNDB 网站 收集数据。VNDB(视觉小说数据库)存储了关于视觉小说、角色、制作者、标签等信息。

文档

此 crate 的全部内容基于新的 HTTPS 基础 API 文档,旨在简化您从网站收集数据的方式。有关此 crate 的更多文档和使用案例,可以在 GitHub 上的 "examples" 目录 或您使用的 crate 部分的相应模块中找到。

要求

此 crate 仅需要 VNDB API 密钥即可使用。要获取 API 密钥,请按照以下说明操作,或单击此 链接(如果您已有账户,则请点击)(API 密钥文档)。

获取 API 密钥

  1. 注册 VNDB 账户(或如果您已有账户,请登录)
  2. 打开 "我的资料" 标签并导航到 "应用" 部分
  3. 创建新令牌并按照说明使用(请参阅 "examples" 目录

递归查询

字段:此部分允许您选择从网站获取特定主题(视觉小说、制作者等)信息的内容。遗憾的是,由于视觉小说、发布和角色查询的递归性质,递归字段选择已被限制。虽然此 crate 中的结构体确实允许进行此类递归字段查询,但递归选择字段非常不切实际,并且会导致 VNDB 由于大小过大而拒绝提供响应。这些限制仅适用于视觉小说、发布和角色查询。您仍然可以使用上述查询填充所有结构体字段。结构体中的递归部分(如视觉小说查询中的相关视觉小说)将仍然具有其名称和 ID,以便稍后进行搜索以获取更多信息。

依赖项

约 6-21MB
~274K SLoC