KeyError:使用 Python Instagram API 客户端的“数据”
Posted
技术标签:
【中文标题】KeyError:使用 Python Instagram API 客户端的“数据”【英文标题】:KeyError: 'data' with Python Instagram API client 【发布时间】:2016-02-28 17:16:11 【问题描述】:我在MacOS
上使用这个客户端python-instagram
和Python 3.4.3
。
这是我的步骤:
在instagram
注册了一个新客户,收到client_id
和client_secret
点安装python-instagram
复制sample_app.py
到我的mac
我按照Sample app
上的说明操作,我通过 instagram 成功授权了我的应用程序并尝试了这个list of examples,但它们都不起作用。单击 API 请求的 <h2>
标头和计数器更改后,我看到 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 客户端示例。
【问题讨论】:
【参考方案1】:此错误有一个打开的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))
【讨论】:
这对我有用!一些错误...我在 Python 3.4 上对其进行了测试。 我花了一段时间才发现这个错误并“破解”它,但我无法在我们的 docker 上修复它,因为它们是从 pip 源构建的。我真的希望他们将此修复程序合并到主分支中。 我也通过 pip 安装了 python-instagram,但可以按照@Forge 的说明解决问题。如果您键入pip uninstall python-instagram
,系统将显示要卸载的文件列表,以及相应的位置,包括models.py。对“继续(y/n)?”说“n”,不卸载 python-instagram,现在您知道文件在哪里了。
如果我想获取媒体的cmets怎么办?通过这种方式,可以获得媒体信息,如创建时间、链接等。这只是一种简单的传递错误的方法,但仍然不能解决主要问题。获取不到特定媒体的cmets。
@waterkinq 我一直在想同样的事情。这是否意味着我们无法获得 cmets,或者我们只会在 cmets 存在时获得(避免在不存在时出现错误)?【参考方案2】:
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))
【讨论】:
这个修复也适用于我,但我希望不是“最终”解决方案【参考方案3】:+1 来自@forge 的回答
对于 docker 用户(如评论中所述),fork python-instagram repo,编辑,然后通过 github pip install。
或者只是在你的 Dockerfile 中使用其他人的 fork 并带有以下行:
pip install git+https://github.com/zgazak/python-instagram
pythoninstagram-apidocker
【讨论】:
【参考方案4】:当您在 docker 等环境或没有可读终端的环境中工作时,这并不是一个真正的答案,只是一个基于 @forge 答案的快速解决方法。
sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py
【讨论】:
如果它“不是一个真正的答案”,那么当你有足够的声望离开 cmets 时,你应该把它作为评论留下。以上是关于KeyError:使用 Python Instagram API 客户端的“数据”的主要内容,如果未能解决你的问题,请参考以下文章
KeyError:使用 Python Instagram API 客户端的“数据”