从 Steam Api 和 IGDB 同步数据

Synchronize data from Steam Api and IGDB

我创建了一个从 IGDB API (https://api-docs.igdb.com/) 获取数据的应用程序来显示游戏信息。

我想允许用户导入他们的 Steam 游戏库。

我使用 Steam 端点 GetOwnedGames (http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=xxxx&steamid=user_steam_id&format=json&include_appinfo=1&include_played_free_games=1) 发回数据,例如

{
    "response": {
        "game_count": 1,
        "games": [
            {
                "appid": 6020,
                "name": "STAR WARS™ Jedi Knight: Jedi Academy™",
                "playtime_forever": 0,
                "img_icon_url": "2e359a8df71ea18ddd77fda3f6b307e6e86ef910",
                "img_logo_url": "027e513fe7e7681203587f7926828fb188af54ed",
                "playtime_windows_forever": 0,
                "playtime_mac_forever": 0,
                "playtime_linux_forever": 0
            },
        ]
    }
}

但是我在链接 Steam 数据和 IGDB 数据时遇到了问题。

我认为我无法按名称搜索 IGDB,因为例如,如果我搜索“STAR WARS™ Jedi Knight: Jedi Academy™”

POST https://api.igdb.com/v4/games

BODY
fields *, platforms.*, platforms.websites.*;
where name ~ *"STAR WARS™ Jedi Knight: Jedi Academy™"* & platforms != null;
limit 50; sort first_release_date desc;

IGDB 没有找到任何东西,因为它知道这个游戏是“星球大战:绝地武士 - 绝地学院”。 (去除特殊字符也不起作用)

您将如何链接这两个 API?

没有简单的方法。您必须执行几个步骤才能在服务之间匹配游戏。您需要使用 Steam 应用 ID。

您无法从 Steam 开始,因为 Steam 没有关于 IGDB 的任何信息。你必须从 IGDB 开始。

IGDB 提供 website 端点:

field       type            description
category    Category Enum   The service this website links to
...
url         String          The website address (URL) of the item

Website Enums

category
name        value
official    1
...
steam       13

现在您拥有了 Steam URL,它在其 URL 中包含唯一的 Steam 应用程序 ID:https://store.steampowered.com/app/6020。这可能已经足够匹配游戏了。

使用 Steam Web API 端点 GetAppList 您可以将 Steam 应用 ID 与游戏名称相匹配。