26 个版本 (15 个重大更新)
0.20.1 | 2023 年 8 月 19 日 |
---|---|
0.19.0 | 2023 年 8 月 18 日 |
0.17.0 | 2023 年 4 月 24 日 |
0.15.0 | 2022 年 12 月 30 日 |
0.3.0 |
|
#462 in 网页编程
每月 130 次下载
47KB
1K SLoC
nekosbest
Rust 对 nekos.best 的 API 包装器。
用法
[dependencies]
nekosbest = "0.20"
示例
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let img_url: String = nekosbest::get(nekosbest::Category::Neko).await?.url;
println!("{img_url}");
Ok(())
}
或者使用数量(数量由服务器限制为 20)
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let images = nekosbest::get_amount(nekosbest::Category::Neko, 20).await?.0;
println!("{images:?}");
Ok(())
}
如果你已经有了一个想要使用的 Client
,请分别使用 get_with_client
和 get_with_client_amount
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = nekosbest::client::Client::new(nekosbest::client::ClientConfig::default());
let details = nekosbest::get_with_client(&client, nekosbest::Category::Neko)
.await?
.details
.try_into_image()
.unwrap();
println!("Source: {}", details.source_url);
println!("Artist: {}", details.artist_name);
println!("Artist link: {}", details.artist_href);
Ok(())
}
还有一个名为 details
的属性
对于 Category::Neko
、Category::Husbando
、Category::Kitsune
、Category::Waifu
(图片端点)
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let details = nekosbest::get(nekosbest::Category::Neko)
.await?
.details
.try_into_image()
.unwrap();
println!("Source: {}", details.source_url);
println!("Artist: {}", details.artist_name);
println!("Artist link: {}", details.artist_href);
Ok(())
}
对于其他所有内容(GIF 端点)
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let details = nekosbest::get(nekosbest::Category::Pat)
.await?
.details
.try_into_gif()
.unwrap();
println!("Anime name: {}", details.anime_name);
Ok(())
}
或者使用 strong-types
功能,为详情提供强类型保证,因此不需要为详情类型进行 unwrap
/ expect
警告:实验性,未来可能随时更改。
请记得在 get
、get_amount
、get_with_client
和 get_with_client_amount
前加上 st_
。
猫娘
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = nekosbest::st_get::<nekosbest::Neko>().await?;
let details = resp.details();
println!("Artist: {}", details.artist_name);
println!("Artist link: {}", details.artist_href);
println!("Source: {}", details.source_url);
Ok(())
}
GIF
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let details = nekosbest::st_get::<nekosbest::Pat>().await?.details;
println!("Anime name: {}", details.anime_name);
Ok(())
}
下载图片。
使用 download
功能,可以直接下载图片,如下所示
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = nekosbest::get(nekosbest::Category::Neko).await?;
let image = nekosbest::download::download(&resp).await?;
// maybe also save, or just use it directly
tokio::task::spawn_blocking(move || image.save("neko.png")).await??;
// or alternatively, if you just want to save it, without
// loading the whole image in-memory:
nekosbest::download::download_to_file(&resp, "neko.png").await?;
Ok(())
}
或者直接从给定的 URL 下载
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// let resp = nekosbest::get(nekosbest::Category::Neko).await?;
// let url: String = resp.url;
let url = "https://nekos.best/api/v2/neko/1efcda2d-d0d3-4e96-9b40-86852374b4bc.png".to_owned();
let image = nekosbest::download::download_from_url(&url).await?;
tokio::task::spawn_blocking(move || image.save("neko.png")).await??;
// or alternatively, if you just want to save it, without
// loading the whole image in-memory:
nekosbest::download::download_from_url_to_file(&url, "neko.png").await?;
Ok(())
}
阻塞客户端
当使用 "blocking" 功能时,所有函数都变为阻塞。
依赖项
~6–23MB
~329K SLoC