You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IGDB API通过URL/Slug获取游戏信息时遇语法错误求助

通过IGDB URL或Slug查询游戏信息时触发400语法错误

我在使用Python调用IGDB API获取游戏信息时遇到问题:仅持有目标游戏的IGDB URL,没有对应ID,用ID查询能正常返回结果,但尝试用URL或Slug作为查询条件时,接口返回400状态码并提示语法错误。

我的代码如下:

token = get_token()

client_id = "my id"

headers = {"Client-ID":client_id, "Authorization":"Bearer " + token['access_token'], "Content-Type":"application/x-www-form-urlencoded"}

# slug = url.split("/games/")[1]
# data = "fields *, cover.url, videos.video_id, release_dates.human; where slug = '"+slug+"';"
data = "fields *, cover.url, videos.video_id, release_dates.human; where url = '"+url+"';"

response = requests.post("https://api.igdb.com/v4/games", headers=headers, data=data)

game_info = json.loads(response.content.decode('utf-8'))

接口返回的错误信息:

[{'title': 'Syntax Error', 'status': 400, 'cause': "Expecting a STRING as input, surround your input with quotes starting at 'https' expecting {'{', 'f', '(', '[', 'true', 't', 'false', 'null', 'n'}"}]

问题根源

IGDB API的查询DSL要求字符串类型的查询值必须用双引号包裹,你用了单引号导致语法解析失败。

修正后的代码

方案1:用Slug查询(推荐,更稳定)

Slug是IGDB游戏的唯一标识字段,从URL中提取后用双引号包裹:

token = get_token()
client_id = "my id"
headers = {
    "Client-ID": client_id,
    "Authorization": f"Bearer {token['access_token']}",
    "Content-Type": "application/x-www-form-urlencoded"
}

# 示例URL:https://www.igdb.com/games/elden-ring
url = "https://www.igdb.com/games/elden-ring"
slug = url.split("/games/")[1]
# 用双引号包裹slug值
data = f"fields *, cover.url, videos.video_id, release_dates.human; where slug = \"{slug}\";"

response = requests.post("https://api.igdb.com/v4/games", headers=headers, data=data)
game_info = json.loads(response.content.decode('utf-8'))

方案2:用URL查询

如果必须用URL查询,同样需要将URL用双引号包裹:

token = get_token()
client_id = "my id"
headers = {
    "Client-ID": client_id,
    "Authorization": f"Bearer {token['access_token']}",
    "Content-Type": "application/x-www-form-urlencoded"
}

url = "https://www.igdb.com/games/elden-ring"
# 用双引号包裹URL值
data = f"fields *, cover.url, videos.video_id, release_dates.human; where url = \"{url}\";"

response = requests.post("https://api.igdb.com/v4/games", headers=headers, data=data)
game_info = json.loads(response.content.decode('utf-8'))

额外提示

  • 优先使用slug查询:IGDB的URL可能包含额外跟踪参数,直接截取容易出错,而slug是游戏的固定标识字段,更可靠。
  • 用f-string拼接查询语句:避免手动拼接字符串时的引号嵌套问题,代码更易维护。

内容的提问来源于stack exchange,提问作者TCombu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:05:05