问题
I'm using this client python-instagram with Python 3.4.3
on MacOS
.
Here are my steps:
- Registered a new client on
instagram
, receivedclient_id
andclient_secret
- Pip install
python-instagram
- Copy
sample_app.py
to my mac
I followed the instructions on Sample app, I successfully authorized my app via instagram and tried this list of examples, but none of them worked. After my click the <h2>
header and counter of API requests changes and I see Remaining API Calls = 486/500
.
If I try to get User Recent Media
an exception KeyError: 'data'
shows in my terminal. If I delete try - except
construction, leaving block in try
, when I'll see 'Error: 500 Internal Server Error'.
Here is the traceback:
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'
All the code I used is from the sample of the official python API client by Instagram.
回答1:
There is an open Github issue for this bug, a fix was sent, but it's not merged yet.
Add the one line fix to models.py
on your installed package.
Open with sudo:
sudo vi /Library/Python/2.7/site-packages/instagram/models.py # Use relevant python version
On line 99, add this:
if "data" in entry["comments"]:
Correct indentation on next two lines:
for comment in entry['comments']['data']:
new_media.comments.append(Comment.object_from_dictionary(comment))
回答2:
It appears that there is a bug in models.py. If you comment out line 99 and 100 in that file, the "sample app" will work, or at least appears to work. Obviously, this is not a "real" fix but it does show that it is not a problem with the sample Python program, or Instagram.
Line 99 # for comment in entry['comments']['data']:
Line 100 # new_media.comments.append(Comment.object_from_dictionary(comment))
回答3:
+1 for answer from @forge
For docker users (as asked in a comment), fork the python-instagram repo, edit, and then pip install via github.
Or just use someone else's fork with the following line in your Dockerfile:
pip install git+https://github.com/zgazak/python-instagram
pythoninstagram-api docker
回答4:
This is not really an answer just a quick workaround based on the answer by @forge when you are working in environments like docker or an environment that doesn't have a readable terminal.
sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py
来源:https://stackoverflow.com/questions/33924581/keyerror-data-with-python-instagram-api-client