Невозможно получить URL-адрес обложки из API IGDB

Я только начинаю работать с 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-адресов изображений, а не изображений для игры, которую я ищу.

попробуйте с params = {"fields":"url", "game":game_id}

Tarique 09.05.2024 20:58

Я попробовал, но при использовании «игры» мне все равно выдается тот же список из 10 случайных изображений.

TCombu 12.05.2024 20:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
123
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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+';'). После этого все работает. :)

TCombu 16.05.2024 00:48

Ах да, я забыл, где я подкорректирую ответ для полноты

Barry Carlyon 17.05.2024 01:03

Другие вопросы по теме