我刚刚开始使用 IGDB API,我正在尝试使用 Python 中的请求获取搜索结果所需的所有数据。我的搜索功能运行良好,但 API 只返回搜索结果某些元素的 ID 值,而不返回实际数据,例如图像封面、流派或平台。
现在我正在尝试从 API 中提取图像封面 URL,但当我尝试封面端点时,它似乎只是返回相同的随机图像,而不是我正在寻找的游戏的一个或多个图像。我不确定是否需要以某种方式指定图像 id,但我也尝试过并得到了相同的结果。
import json
import requests
token = get_token()
client_id = "my id"
headers = {"Client-ID":client_id, "Authorization":"Bearer " + token['access_token']}
game_id = "84920"
params = {"fields":"url", "id":game_id}
response = requests.get("https://api.igdb.com/v4/covers", params=params, headers=headers)
image = json.loads(response.content.decode('utf-8'))
还尝试过:
image_id = "134616"
params = {"fields":"url", "image_id":image_id}
response = requests.get("https://api.igdb.com/v4/covers", params=params, headers=headers)
image = json.loads(response.content.decode('utf-8'))
结果:看似随机的图像网址列表,而不是我正在寻找的游戏的图像。
IGDB 的 API 使用类似 SQL 的查询,在请求的
body
部分中以字符串形式编写。
您正在尝试将请求作为参数,并发出 GET 请求,而不是 POST 请求
所以以下应该可以解决问题
import json
import requests
token = get_token()
client_id = "my id"
headers = {"Client-ID":client_id, "Authorization":"Bearer " + token['access_token']}
game_id = "84920"
response = requests.post("https://api.igdb.com/v4/games", headers=headers, data='fields cover.image_id; id='+game_id+';')
image = json.loads(response.content.decode('utf-8'))
注意:我正在选择
/games
端点,并使用扩展器来 join
另一个表。由于封面端点,封面的 id
不是游戏 ID,因此您的原始请求无论如何都不会获取正确的封面。
您还可能需要获取
image_id
并构建一个 URL,因为封面中返回的 url
对于大多数用例来说通常没有用处。
所以将
image_id
放入 https://images.igdb.com/igdb/image/upload/t_{size}/{image_id}.jpg
我通常更喜欢/使用
cover_big
作为尺寸