KeyError:Python Instagram API客户端的“数据”

问题描述 投票:11回答:4

我在python-instagram上使用这个客户端Python 3.4.3MacOS

这是我的步骤:

  • instagram注册了一个新客户,收到了client_idclient_secret
  • 点击安装python-instagram
  • sample_app.py复制到我的mac

我按照Sample app上的说明,我通过instagram成功授权我的应用程序,并尝试了这个list of examples,但没有一个工作。点击<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'

我使用的所有代码都来自Instagram官方python API客户端的示例。

python instagram instagram-api keyerror
4个回答
22
投票

这个bug有一个开放的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))

5
投票

看来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
投票

+1来自@forge的回答

对于docker用户(如评论中所述),分叉python-instagram repo,编辑,然后通过github pip install。

或者只是在Dockerfile中使用其他人的fork和以下行:

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


0
投票

当您在docker或没有可读终端的环境中工作时,@forge的答案基于快速解决方法,这不是真正的答案。

sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py
© www.soinside.com 2019 - 2024. All rights reserved.