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
Это не совсем ответ, просто быстрый обходной путь, основанный на ответе @forge, когда вы работаете в таких средах, как docker или среда, в которой нет читаемого терминала.
sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py