2015-11-25 84 views
11

我使用此客户端python-instagramPython 3.4.3MacOSKeyError:'data'与Python Instagram API客户端

我的步骤:

  • 注册于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' 

我所使用的代码是从官方的Python API客户端通过Instagram的样品。

回答

21

有一个开放的Github issue这个错误,一个fix被送往,但它尚未合并。

在安装的软件包中添加一行修补程序models.py

开放使用sudo:从@forge答案

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

这对我有效!一些错误...我在Python 3.4上测试它。 –

+0

我花了一段时间才发现这个bug并“破解”它,但我无法在我们的docker上修复它,因为它们是从pip源代码构建的。我真的希望他们把这个修补程序合并到主分支中。 – anber

+0

我也通过pip安装了python-instagram,但可以在@Forge指令后解决问题。如果您输入'pip uninstall python-instagram',系统将显示要卸载的文件列表以及各自的位置,包括models.py。说“n”为“继续(y/n)?”,不要卸载python-instagram,现在你知道文件在哪里。 –

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)) 
+0

此修补程序也适用于我,但我希望不是“最终”解决方案 – Stefano

1

+1:在接下来的两行

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

正确的缩进:

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

在99行,添加此

F或docker用户(如评论中所述),分叉python-instagram回购,编辑,然后通过github进行pip安装。

或者只是用别人的叉子在Dockerfile以下行:

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

0

这是不是一个真正的答案只是基于由@forge当回答一个快速的解决方法你在码头工作环境或没有可读终端的环境中工作。

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

如果它“不是一个真正的答案”,那么你应该留下它作为评论,当你有足够的声誉留下评论。 –