我在python-instagram
上使用这个客户端Python 3.4.3
和MacOS
。
这是我的步骤:
instagram
注册了一个新客户,收到了client_id
和client_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客户端的示例。
这个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))
看来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 repo,编辑,然后通过github pip install。
或者只是在Dockerfile中使用其他人的fork和以下行:
pip install git+https://github.com/zgazak/python-instagram
当您在docker或没有可读终端的环境中工作时,@forge的答案基于快速解决方法,这不是真正的答案。
sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py