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

Posted

技术标签:

【中文标题】KeyError:使用 Python Instagram API 客户端的“数据”【英文标题】:KeyError: 'data' with Python Instagram API client 【发布时间】:2016-02-28 17:16:11 【问题描述】:

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

这是我的步骤:

instagram注册了一个新客户,收到client_idclient_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 客户端的“数据”

KeyError:0 在 python 中使用多处理

Python 3使用正确的哈希来解决KeyError问题

python字典日期时间作为键,keyError

Python 中使用朴素贝叶斯进行简单文本分类 - KeyError

python用颜色引发KeyError消息