KeyError: 'data' avec le client D'API Instagram de Python

j'utilise ce client python-instagramPython 3.4.3MacOS.

mes pas:

  • enregistré un nouveau client sur instagram, a reçu client_id et client_secret
  • Pip install python-instagram
  • Copie sample_app.py à mon mac!--20-->

j'ai suivi les instructions sur Sample app, j'ai autorisé mon application via instagram et j'ai essayé cette liste d'exemples, mais aucun d'entre eux travaillaient. Après mon clic le <h2> en-tête et le compteur de requêtes à l'API change et je vois Remaining API Calls = 486/500.

Si j'essaie d'avoir User Recent Media une exception KeyError: 'data' montre dans mon terminal. Si je supprime try - except construction, laissant bloc try, quand je verrai 'Error: 500 Internal Server Error'.

Voici le 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'

tout le code que j'ai utilisé provient de L'échantillon du client officiel de L'API python par Instagram.

11
demandé sur Forge 2015-11-25 22:08:02

4 réponses

Il y a un Github issue pour ce bug, un fix a été envoyé, mais il n'est pas encore fusionné.

ajouter le correctif d'une ligne à models.py sur votre paquet installé.

Ouvrir avec sudo:

sudo vi /Library/Python/2.7/site-packages/instagram/models.py  # Use relevant python version 

à la ligne 99, ajoutez ce qui suit:

if "data" in entry["comments"]:

indentation correcte sur les deux lignes suivantes:

       for comment in entry['comments']['data']: 
           new_media.comments.append(Comment.object_from_dictionary(comment))
22
répondu Forge 2016-03-20 05:05:08

il semble qu'il y ait un bug dans models.py. Si vous commentez les lignes 99 et 100 dans ce fichier, le "sample app" fonctionnera, ou du moins semble fonctionner. Évidemment, ce n'est pas une "vraie" correction, mais cela montre que ce n'est pas un problème avec le programme python, ou Instagram.

    Line 99  #  for comment in entry['comments']['data']:
    Line 100 #      new_media.comments.append(Comment.object_from_dictionary(comment))
5
répondu DJ Push Play 2015-12-02 15:20:51

+1 pour la réponse de @forge

pour les utilisateurs de dockers (comme demandé dans un commentaire), bifurquez le python-instagram repo, éditez, puis pip installez via github.

ou utilisez la fourchette de quelqu'un d'autre avec la ligne suivante dans votre fichier Dockerfile:

pip install git+https://github.com/zgazak/python-instagram

1
répondu zgazak 2016-05-19 10:48:17

ce n'est pas vraiment une réponse juste une solution rapide basée sur la réponse de @forge lorsque vous travaillez dans des environnements comme docker ou un environnement qui n'a pas de terminal lisible.

sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py
0
répondu Cj Goldsmith 2017-05-24 04:05:52