8个版本

0.2.0 2019年8月27日
0.1.0 2019年8月27日
0.0.24 2019年8月26日

#3 in #视频游戏

Apache-2.0/MIT

69KB
1K SLoC

IGDB Rust客户端 idgb

Build Status License Cargo Documentation

非官方互联网游戏数据库Rust API客户端

使用 igdb-rs,您可以轻松检索与视频游戏相关的信息,例如

  • 游戏
  • 游戏引擎
  • 游戏年龄评级
  • 游戏系列
  • 发行日期
  • 多人游戏信息
  • 平台
  • 玩家视角
  • 视频
  • 艺术作品
  • 封面
  • 屏幕截图
  • 网站

等等!。

使用现成的 客户端方法 或使用 RequestBuilder 构建您自己的 查询 来检索您所需的确切数据。

以下有 代码示例 部分,您可以查看一些示例

IGDB网站

https://www.igdb.com/

IGDB API端点信息网站

https://api-docs.igdb.com/#endpoints

文档

请在此处查看文档:docs

示例

您可以在以下位置找到一些代码片段:examples

快速入门

将以下行添加到您的 Cargo.toml

[dependencies]
igdb-rs = "*"

如果您已安装,则可以使用 cargo add

$ cargo add igdb-rs

端点

igdb-rs 目前支持以下端点

端点 描述
年龄评级 各种评级机构的年龄评级
艺术作品 官方艺术作品(分辨率和宽高比可能不同)
角色 视频游戏角色
角色大头照 描绘游戏角色的图像
公司 视频游戏公司。包括出版商和开发者
封面 游戏的封面艺术
游戏 视频游戏!
游戏引擎 如虚幻引擎之类的视频游戏引擎
游戏模式 单人,多人等
游戏视频 与游戏相关的视频
游戏系列 如星球大战之类的视频游戏系列列表
多人游戏模式 支持的多玩家类型的数据
平台 运行游戏或游戏分发网络的硬件
平台Logo 平台Logo
玩家视角 玩家视角描述了玩家在视频游戏中的视图/视角
发布日期 一个方便的端点,用于扩展游戏发布日期。用于深入了解发布日期、平台和版本。
屏幕截图 游戏截图
主题 视频游戏主题
网站 网站URL,通常与游戏相关

注意:客户端会自动使用宏生成,因此添加新端点非常简单。如果您需要添加其他端点,请随时提出请求或与提交拉取请求的库进行合作。

代码示例

使用igdb-rs可以轻松查询互联网游戏数据库。

您只需创建一个带有您的API密钥的IGDBClient对象,您可以在以下位置获取一个:https://api.igdb.com/

运行示例

您可以在以下位置找到一些代码片段:examples

In order to run the samples, just replace the user-key parameter inside the code sample
with your access key and execute it by using the sample name specified inside Cargo.toml file.

Example:

cargo run --example search-games-by-name
cargo run --example game-video-urls

使用您的用户密钥创建IGDBClient

    let igdb_client = IGDBClient::new("user-key");

按名称查找游戏

    let games_client = IGDBClient::new("user-key").games();
    let game = games_client.get_first_by_name("Witcher 3").await.unwrap();

    println!("Name: {}", game.name);
    println!("Summary: {} ...", &game.summary[..150]);
    println!("Story line: {}", game.storyline);
    println!("Url: {}", game.url);

    //  Name: The Witcher 3: Wild Hunt - Hearts of Stone
    //  Summary: Hired by the Merchant of Mirrors, Geralt is tasked with overcoming Olgierd von Everec -- a ruthless bandit captain enchanted with the power of immorta ...
    //  Story line: Professional monster slayer is hired to deal with a ruthless bandit captain who possesses the power of immortality.
    //  Url: https://www.igdb.com/games/the-witcher-3-wild-hunt-hearts-of-stone

按名称查找游戏

    let games_client = IGDBClient::new("user-key").games();
        // Get ten first results containing Borderlands in it's name
    let games_results = games_client.get_by_name("Borderlands", 10).await.unwrap();

    for game in games_results {
        println!("Name: {}", game.name);
        println!("Story line: {}", game.storyline);
        println!("Url: {}", game.url);
    }

    //  Name: Borderlands: The Pre-Sequel - Lady Hammerlock The Baroness
    //  Story line:
    //  Url: https://www.igdb.com/games/borderlands-the-pre-sequel-lady-hammerlock-the-baroness
    //  Name: Borderlands Legends
    //  Story line:
    //  Url: https://www.igdb.com/games/borderlands-legends
    //  Name: Tales from the Borderlands: Episode 3 - Catch a Ride
    //  Story line:
    //  Url: https://www.igdb.com/games/tales-from-the-borderlands-episode-3-catch-a-ride
    //  Name: Borderlands 2: Game of the Year Edition
    //  Story line:
    //  Url: https://www.igdb.com/games/borderlands-2-game-of-the-year-edition

    //Omitted for brevity...

游戏角色

    let characters_client = igdb_client.characters();

    //Get Witcher 3 characters
    for ch in characters_client.get_by_game_id(1942, 10).await.unwrap() {
    println!("name: {}, slug: {}, url: {}", ch.name, ch.slug, ch.url);
    }

    //  name: Dandelion, slug: dandelion, url: https://www.igdb.com/characters/dandelion
    //  name: Jaskier, slug: jaskier, url: https://www.igdb.com/characters/jaskier
    //  name: Emhyr Var Empreis, slug: emhyr-var-empreis, url: https://www.igdb.com/characters/emhyr-var-empreis
    //  name: Ciri, slug: ciri, url: https://www.igdb.com/characters/ciri
    //  name: Avallac'h, slug: avallach, url: https://www.igdb.com/characters/avallach

    //Omitted for brevity...

游戏引擎信息

    let igdb_client = IGDBClient::new("user-key");

    let games_client = igdb_client.games();
    let game = games_client
        .get_first_by_name("Riders of Asgard")
        .await
        .unwrap();

    let engine_id = game.game_engines.first().unwrap();

    let engines_client = igdb_client.game_engines();
    let engine = engines_client
        .get_first_by_id(*engine_id as usize)
        .await
        .unwrap();

    println!(
        "name: {}, url: {}, companies: {:?}",
        engine.name, engine.url, engine.companies
    );

    // name: Unreal Engine 4, url: https://www.igdb.com/game_engines/unreal-engine-4--1,
    // companies: [168, 11060]

游戏发布数据


  let igdb_client = IGDBClient::new("user-key");

  let release_client = igdb_client.release_dates();

  //Get releases for Borderlands3 with id 19164
  let releases = release_client.get_by_game_id(19164, 10).await.unwrap();

  let platform_client = igdb_client.platforms();

  for release in releases {
    let platform = platform_client
        .get_first_by_id(release.platform as usize)
        .await
        .unwrap();

    println!(
            "platform: {} release date: {}",
            platform.name, release.human
            );
    }

    //  platform: Xbox One release date: 2019-Sep-13
    //  platform: PC (Microsoft Windows) release date: 2019-Sep-13
    //  platform: PlayStation 4 release date: 2019-Sep-13
    //  platform: Google Stadia release date: 2019-Sep-13

游戏视频URL

    let igdb_client = IGDBClient::new("user-key");
    let videos_client = igdb_client.game_videos();

    //Query first 8 youtube videos for Witcher 3
    let response = videos_client.get_by_game_id(1942, 8).await.unwrap();

    for video in response {
    println!("{:?}", video);
    }

    // Youtube links for Witcher 3 Game

    //  GameVideo { id: 5993, game: 1942, video_id: "xQGam9OHSUo" }
    //  GameVideo { id: 5989, game: 1942, video_id: "_IBAovRNCuA" }
    //  GameVideo { id: 5995, game: 1942, video_id: "8ZLfJjlZKvc" }
    //  GameVideo { id: 5987, game: 1942, video_id: "5nLipy-Z4yo" }
    //  GameVideo { id: 5991, game: 1942, video_id: "6f8TbvsZ5Mk" }
    //  GameVideo { id: 5994, game: 1942, video_id: "p14dHAwLOmo" }
    //  GameVideo { id: 5990, game: 1942, video_id: "QrwGXAcE6ZA" }
    //  GameVideo { id: 5996, game: 1942, video_id: "sb81f-ejNSI" }

下载截图和封面


    let igdb_client = IGDBClient::new("user-key");
    let games_client = igdb_client.games();
    let witcher = games_client.get_first_by_name("Witcher 3").await.unwrap();

    //Get the first 3 covers for the Witcher 3 game
    let covers_client = igdb_client.covers();
    let covers_response = covers_client.get_by_game_id(witcher.id, 3).await.unwrap();

    //Get the first 3 screenshots for the Witcher 3 game
    let screenshots_client = igdb_client.screenshots();
    let screenshots_response = screenshots_client
        .get_by_game_id(witcher.id, 3)
        .await
        .unwrap();

    for (i, cover) in covers_response.iter().enumerate() {
        covers_client
            .download_by_id(
                cover.id,
                format!("cover{}.jpg", i),
                MediaQuality::ScreenshotHuge,
            )
            .await
            .unwrap();
    }

    for (i, screenshot) in screenshots_response.iter().enumerate() {
        screenshots_client
        .download_by_id(
                screenshot.id,
                format!("screenshot{}.jpg", i),
                MediaQuality::ScreenshotHuge,
            )
            .await
            .unwrap();
    }

自定义查询I

查找符合请求构建器标准的要求的游戏


    let igdb_client = IGDBClient::new("user-key");

    let mut game_request = IGDBClient::create_request();
    game_request
        .add_field("name")
        .add_fields(vec!["storyline", "summary"])
        .contains("name", "Ast")
        .add_where("category", Equality::NotEqual, "0")
        .sort_by("name", OrderBy::Descending)
        .limit(3);

    // Generated query
    // fields name,storyline,summary; where name  ~ *"Ast"* & category != 0; sort name desc; limit 3;

    let game_client = igdb_client.games();
    let games = game_client.get(game_request).await.unwrap();

    for g in games {
        println!("Name: {}", g.name);
    }

    //Name: Yo-Kai Watch Blasters: Moon Rabbit Crew
    //Name: XCOM 2: Shen's Last Gift
    //Name: Warlock: Master of the Arcane - Armageddon

自定义查询II

通过构建自定义查询获取《边境之地2》的多玩家信息


    let idbg_client = IGDBClient::new("user-key");

    let games_client = idbg_client.games();

    let mut games_req = IGDBClient::create_request();
    games_req
        .add_field("id")
        .add_field("name")
        .search("Borderlands 2")
        .limit(3);

    let result = games_client.get(games_req).await.unwrap();

    let ids: Vec<String> = result.iter().map(|g| g.id.to_string()).collect();
    let names: Vec<String> = result.iter().map(|g| g.name.clone()).collect();

    let multiplayer_client = idbg_client.multiplayer_modes();

    let mut mul_request = IGDBClient::create_request();

    mul_request.all_fields().add_where_in("id".to_owned(), ids);

    let results = multiplayer_client.get(mul_request).await.unwrap();

    for (i, m) in results.iter().enumerate() {
        println!("{} has online coop: {}", names[i], m.onlinecoop);
        println!("{} has local coop: {}", names[i], m.lancoop);
    }

    //  Prints:
    //  Borderlands 2 has online coop: true
    //  Borderlands 2 has local coop: false

游戏评分和投票

    let igdb_client = IGDBClient::new("user-key");
    let games_client = igdb_client.games();

    let game = games_client.get_first_by_name("Modern Warfare 3").await.unwrap();

    println!("Game: {}, rating: {}, total votes: {}", game.name, game.total_rating as usize, game.total_rating_count);

    //Game: Call of Duty: Modern Warfare 3, rating: 80, total votes: 442

系列游戏


    let igdb_client = IGDBClient::new("user-key");
    let franchises_client = igdb_client.franchises();
    let games_client = igdb_client.games();

    //Get games inside franchises containing name "Lego"
    for franchise in franchises_client
        .get_by_name("Lego", 5)
        .await
        .unwrap()
    {
        for game in &franchise.games {
            let game_info = games_client.get_first_by_id(*game as usize).await.unwrap();

            println!("Name: {}", game_info.name);
        }
    }

    // Name: Lego Indiana Jones 2: The Adventure Continues
    // Name: Lego Indiana Jones: The Original Adventures
    // Name: LEGO Star Wars II: The Original Trilogy
    // Name: Lego Racers 2
    // Name: LEGO Racers
    // Omitted for brevity...

游戏年龄分级

    let igdb_client = IGDBClient::new("user-key");
    let games_client = igdb_client.games();
    let age_rating_client = igdb_client.age_ratings();

    let game = games_client
        .get_first_by_name("Call of Duty: Modern Warfare 3")
        .await
        .unwrap();

    for age_rating in game.age_ratings {

        //Get a maximum of 3 age ratings for Modern Warfare 3

        let ratings = age_rating_client
            .get_by_id(age_rating as usize, 3)
            .await
            .unwrap();

        for rating in ratings {
            println!(
                "Game: {}, Category: {:?}, Rating: {:?}",
                game.name, rating.category, rating.rating
            );
        }

    // Game: Call of Duty: Modern Warfare 3, Category: PEGI, Rating: Eighteen
    }

依赖项

~8MB
~172K SLoC