Imgur API - Как получить все избранное без нумерации страниц? - PullRequest
0 голосов
/ 06 ноября 2019

Согласно Imgur Docs , вызов API «GET Account Favorites» принимает необязательные аргументы для нумерации страниц, подразумевая, что все объекты возвращаются без него.

Однако, когда я используюследующий фрагмент кода (приложение было зарегистрировано, и OAuth уже выполнил тестирование для моей учетной записи), я получаю только первые 30 объектов JSON. В приведенном ниже фрагменте у меня уже есть access_token для авторизованного пользователя и я могу получить данные для этого имени пользователя. Но длина возвращаемого списка всегда составляет первые 30 элементов.

username = token['username']
bearer_headers = {
    'Authorization': 'Bearer ' + token['access_token']
}
fav_url = 'https://api.imgur.com/3/account/' + username + '/' + 'favorites'
r = requests.get(fav_url, headers=bearer_headers)
r_json = r.json()
favorites=r_json['data']
len(favorites)
print(favorites)

Ответ на запрос возвращает словарь с тремя ключами: статус (код состояния HTTP), успех (истина или ложь) и данные, значением которых является список словарей (по одному на избранный)предмет).

Я пытаюсь получить это без нумерации страниц , чтобы я мог извлечь определенные значения метаданных в кадр данных Pandas (идентификатор, дата публикации и т. Д.).

Первоначально я думал, что это проблема с отображением Pandas в записной книжке Jupyter, но отследил ее до API, возвращая только 30 последних элементов списка, несмотря на то, что в документах указано иное. Если в конце я добавлю произвольный номер страницы (например, "/ favours / 1"), он вернет 30 элементов, соответствующих этой странице, но, похоже, не будет возможности получить все элементы или получить счетчикобщее количество элементов или количество страниц заранее.

Что мне не хватает?

Постскриптум: Похоже, что ни один из URI не работает без нумерации страниц, например, получение изображений аккаунта, получение галерейных представлений,и т. д. Если есть необязательный параметр "/ {{page}}", по умолчанию будет отображаться первая страница, если она не указана. Таким образом, я предполагаю, что главный вопрос заключается в следующем: «Поддерживает ли Imgur API даже не разбитые на страницы данные и как к ним обращаться?».

1 Ответ

0 голосов
/ 06 ноября 2019

Разбитые на страницы данные обычно используются, когда возможный размер ответа может быть произвольно большим. Я был бы удивлен, если бы основной сервис, такой как Imgur, имел API, который не работал бы таким образом.

Как вы обнаружили, атрибут page может быть необязательным, и если вы его не предоставите, в качестве ответа вы получите первую страницу.

Если вы хотите получить больше, чем первая страница, вам нужно перебрать номер страницы:

data = []
page = 0
while block := connection.get(page=page):
  data.append(block)
  page += 1

Это предполагает Python3.8 + из-за выражения присваивания :=,Если вы используете более старую версию, вам нужно установить block в теле цикла, но применима та же идея.

...