Подтвердить что ты не робот

KeyError: "данные" с клиентом API Python

Я использую этот клиент python-instagram с Python 3.4.3 на MacOS.

Мои шаги:

  • Зарегистрированный новый клиент на instagram, полученный client_id и client_secret
  • Пиковая установка python-instagram
  • Скопировать sample_app.py в мой mac

Я выполнил инструкции Sample app, я успешно разрешил свое приложение через instagram и попробовал этот список примеров, но никто из них не работал. После моего клика заголовок <h2> и счетчик запросов API меняются, и я вижу Remaining API Calls = 486/500.

Если я попытаюсь получить User Recent Media, в моем терминале появится исключение KeyError: 'data'. Если я удалю конструкцию try - except, оставив блок в try, когда я увижу "Ошибка: 500 Внутренняя ошибка сервера".

Вот трассировка:

Traceback (most recent call last):
File "/Users/user/.envs/insta/lib/python3.4/site-packages/bottle.py", line 862, in _handle
return route.call(**args)
File "/Users/user/.envs/insta/lib/python3.4/site-packages/bottle.py", line 1732, in wrapper
rv = callback(*a, **ka)
File "sample_app.py", line 79, in on_recent
recent_media, next = api.user_recent_media()
File "/Users/user/.envs/insta/lib/python3.4/site-packages/instagram/bind.py", line 197, in _call
return method.execute()
File "/Users/user/.envs/insta/lib/python3.4/site-packages/instagram/bind.py", line 189, in execute
content, next = self._do_api_request(url, method, body, headers)
File "/Users/user/.envs/insta/lib/python3.4/site-packages/instagram/bind.py", line 151, in _do_api_request
obj = self.root_class.object_from_dictionary(entry)
File "/Users/user/.envs/insta/lib/python3.4/site-packages/instagram/models.py", line 99, in object_from_dictionary
for comment in entry['comments']['data']:
KeyError: 'data'

Весь код, который я использовал, - это образец официального клиента API python от Instagram.

4b9b3361

Ответ 1

Для этой ошибки существует Github issue fix, но он еще не слился.

Добавьте исправление одной строки в models.py на установленном вами пакете.

Открыть с помощью sudo:

sudo vi /Library/Python/2.7/site-packages/instagram/models.py  # Use relevant python version 

В строке 99 добавьте следующее:

if "data" in entry["comments"]:

Исправить отступы на следующих двух строках:

       for comment in entry['comments']['data']: 
           new_media.comments.append(Comment.object_from_dictionary(comment))

Ответ 2

Похоже, что в models.py есть ошибка. Если вы прокомментируете строки 99 и 100 в этом файле, "пример приложения" будет работать или, по крайней мере, будет работать. Очевидно, что это не "реальное" исправление, но оно показывает, что это не проблема с образцом программы Python или Instagram.

    Line 99  #  for comment in entry['comments']['data']:
    Line 100 #      new_media.comments.append(Comment.object_from_dictionary(comment))

Ответ 3

+1 для ответа от @forge

Для пользователей докеров (как задано в комментарии), разворачивайте репозиторий python-instagram, редактируйте, а затем устанавливайте pip через github.

Или просто используйте чужую вилку со следующей строкой в ​​файле Docker:

pip install git+https://github.com/zgazak/python-instagram

Ответ 4

На самом деле это не просто быстрый подход, основанный на ответе @forge, когда вы работаете в таких средах, как докер или среда, в которой нет читаемого терминала.

sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py