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

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

Вот мои шаги:

  • Зарегистрировал нового клиента на instagram, получил client_id и client_secret
  • Pip install 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 Internal Server Error».

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

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.


person Andrey    schedule 25.11.2015    source источник


Ответы (4)


Для этой ошибки существует открытый Github issue _ 2_ отправлено, но еще не объединено.

Добавьте однострочное исправление в 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))
person Forge    schedule 12.03.2016
comment
Это сработало для меня! Какой-то баг ... Я тестировал на Python 3.4. - person First Last; 20.03.2016
comment
Мне потребовалось время, чтобы обнаружить эту ошибку и взломать ее, но я не могу исправить ее в наших докерах, потому что они получают сборку из исходных кодов pip. Я очень надеюсь, что они добавят это исправление в основную ветку. - person anber; 04.05.2016
comment
Я также установил python-instagram через pip, но смог решить проблему, следуя инструкции @Forge. Если вы наберете pip uninstall python-instagram, система покажет список файлов, которые нужно удалить, с соответствующими местоположениями, включая models.py. Скажите n, чтобы продолжить (y / n) ?, чтобы НЕ удалять python-instagram, и теперь вы знаете, где находится файл. - person Leandro Guedes; 20.12.2016
comment
Что, если я хочу получить комментарии СМИ? Таким образом можно получить информацию о мультимедиа, такую ​​как время создания, ссылку и т. Д. Это всего лишь простой способ передать ошибку, но все же он не решает основную проблему. Вы не можете получить комментарии конкретных СМИ. - person Mehmet Kagan Kayaalp; 08.02.2017
comment
@waterkinq Мне интересно то же самое. Означает ли это, что мы не можем получать комментарии, или что мы будем получать комментарии только в том случае, если они существуют (чтобы избежать ошибок, когда их нет)? - person Cary Shindell; 06.07.2017
comment
@CaryShindell Это решило мою проблему: для комментария в записи ['comments']. Get ('data', []): new_media.comments.append (Comment.object_from_dictionary (comment)) - person Mehmet Kagan Kayaalp; 06.07.2017
comment
Хорошо, не выдает ошибку, но дает пустые списки для комментариев (для сообщений, о которых я знаю, что они есть) - person Cary Shindell; 06.07.2017

Похоже, что в 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))
person DJ Push Play    schedule 02.12.2015
comment
Это исправление работает и у меня, но я надеюсь, что это не окончательное решение. - person Stefano; 01.02.2016

+1 за ответ от @forge

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

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

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

python instagram-api docker

person zgazak    schedule 19.05.2016

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

sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py
person Cj Goldsmith    schedule 24.05.2017
comment
Если это не совсем ответ, оставьте его как комментарий, когда у вас будет достаточно репутации, чтобы оставлять комментарии. - person Arya McCarthy; 24.05.2017