Я только начинаю работать с API IGDB и пытаюсь получить все данные, необходимые для результатов поиска, с помощью запросов на Python. У меня функция поиска работает нормально, но API возвращает значения идентификаторов только для некоторых элементов результата поиска, а не фактические данные, например обложку изображения, жанры или платформы.
Прямо сейчас я пытаюсь извлечь URL-адрес обложки изображения из API, но когда я пытаюсь использовать конечную точку обложки, кажется, что он возвращает одни и те же случайные изображения, а не изображение или изображения для игры, которую я ищу. Я не уверен, нужно ли мне как-то указывать идентификатор изображения, но я тоже попробовал это и получил тот же результат.
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'))
Результат: список, казалось бы, случайных URL-адресов изображений, а не изображений для игры, которую я ищу.
Я попробовал, но при использовании «игры» мне все равно выдается тот же список из 10 случайных изображений.






API IGDB обрабатывает 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; where id='+game_id+';')
image = json.loads(response.content.decode('utf-8'))
Примечание. Я выбираю конечную точку /games и использую расширитель для join другой таблицы. Поскольку конечная точка обложки id обложки не является идентификатором игры, поэтому ваш первоначальный запрос все равно не сможет получить нужную обложку.
Вместо этого вы также можете получить image_id и создать URL-адрес, поскольку url, возвращаемый в обложке, обычно бесполезен для большинства случаев использования.
Так что поставьте image_id в https://images.igdb.com/igdb/image/upload/t_{size}/{image_id}.jpg
Я обычно предпочитаю/использую cover_big в качестве размера
Спасибо, это работает, хотя это дало мне синтаксическую ошибку, поскольку мне пришлось добавить where перед объявлением идентификатора. Должно быть data='fields cover.image_id; where id='+game_id+';'). После этого все работает. :)
Ах да, я забыл, где я подкорректирую ответ для полноты
попробуйте с
params = {"fields":"url", "game":game_id}