Search code examples
pythoninstagraminstagram-apikeyerror

KeyError: 'data' with Python Instagram API client


I'm using this client python-instagram with Python 3.4.3 on MacOS.

Here are my steps:

  • Registered a new client on instagram, received client_id and client_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.


Solution

  • 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))