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

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

мои действия:

  • зарегистрирован новый клиент на instagram, получен client_id и client_secret
  • Pip установить python-instagram
  • копировать sample_app.py моему Маку!--20-->

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

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

вот traceback:

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.

4 ответов


открытой Github issue для этой ошибки a 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))

Кажется, что есть ошибка в 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))

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

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

или просто используйте чужую вилку со следующей строкой в вашем Dockerfile:

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

pythoninstagram-api настройки


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

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