6 个版本 (3 个稳定版)
2.0.0 | 2023 年 8 月 2 日 |
---|---|
1.0.1 | 2023 年 7 月 13 日 |
0.3.2 | 2023 年 7 月 7 日 |
0.2.0 | 2023 年 7 月 5 日 |
#1777 in 网页编程
每月 45 次下载
61KB
1.5K SLoC
IGDB API Rust 包装器
Internet Game Database API crate。使用 igdb crate,您可以检索 IGDB API 任何端点的信息。
如果您想帮助这个项目,欢迎提交拉取请求和建议 :)
目录
安装
此 crate 使用 cargo-features,因此您的项目仅编译与您将要使用的端点相关的代码。例如,如果您只想查询 games
和 characters
端点,Cargo.toml
应该看起来像这样
[dependencies]
rusty_igdb = { "2.0.0", default-features = false, features = ["game", "character"]}
除非您想从包含所有端点方法和结构的 crate 中获取整个代码库,否则请将以下内容添加到您的 Cargo.toml
[dependencies]
rusty_igdb = "2.0.0"
此外,此包使用 rust nightly build。请确保已安装。
使用方法
基本的 Rust 使用
IGDB 需要Twitch访问凭据才能运行。
您可以在这里阅读如何获取这些凭据。在获取 Twitch 访问令牌 和 Twitch 客户端 ID 后,我们可以将 IGDB API 包装器引入作用域,如下所示
// Along with the wrapper, bring the endpoint Structs to scope so your code knows the return type of the Vector
use rusty_igdb::{ APIWrapper, models::{ Game, GameResult, Character, CharacterResult } };
use std::env;
fn main() {
// Using stored environment variables to unwrap our credentials
let access_token = env::var("TWITCH_ACCESS_TOKEN").unwrap();
let client_id = env::var("TWITCH_CLIENT_ID").unwrap();
// Authenticating with our API wrapper
let api_wrapper = APIWrapper::new(&access_token, &client_id).unwrap();
// Using the API wrapper methods to query for Zelda games
// Here we are expecting a vector of Game struct, so we used the imported Struct.
let zelda_games: GameResult = api_wrapper
.build("games") // endpoint
.search("zelda")
.limit("2")
.fields("name")
.request()
.unwrap();
// Using the API wrapper methods to query for Characters named Mario
// Here we are expecting a vector of Character struct.
let characters_named_mario: CharacterResult = api_wrapper
.build("characters") // endpoint
.search("mario")
.fields("name")
.request()
.unwrap();
}
此示例使用 环境变量 存储从 Twitch 获取的凭据,然后使用 rust 标准功能 std::env
进行访问。在您的个人项目中,您可以根据需要管理这些凭据。
如果您想要完整的字段响应,可以省略 fields()
查询方法。这将返回包含 Solid Snake 的所有相关字段
// no .fields() query method returns every field from endpoint
let solid_snake_chars_vec: CharacterResult = api_wrapper
.build("characters")
.search("Solid Snake")
.request()
.unwrap();
JSON 响应
该软件包提供了一个JSON公共方法,因此您可以自定义响应内容以适应您的项目。以下示例中的Value
代表serde_json::Value
结构体。有关更多信息,请参阅serde_json软件包。
所有IGDB端点都应通过request_json()
方法使用。
let test_characters: Vec<Value> = api_wrapper
.build("search")
.fields("name, gender, country_name")
.where_like("gender != null")
.limit("2")
.request_json()
.unwrap();
/*
response should look like this:
[{
"gender": 0,
"id": 4445,
"name": "Beast"
},
{
"gender": 0,
"id": 8988,
"name": "Mr. Wong"
}],
*/
结果应如下所示
[{
"gender": 0,
"id": 4445,
"name": "Beast"
},
{
"gender": 0,
"id": 8988,
"name": "Mr. Wong"
}]
let first_character = &test_characters[0]["gender"];
路线图
- 剩余的IGDB端点(见里程碑)
- 添加代码覆盖率
许可
Cargo主要在Apache许可证(版本2.0)的条款下分发。
依赖项
~4–16MB
~242K SLoC