2015-11-25 18 views
11

Ich verwende diesen Client python-instagram mit Python 3.4.3 auf MacOS.KeyError: 'Daten' mit Python Instagram API-Client

Meine Schritte:

  • einen neuen Client auf instagram erhielt client_id Einschreibebriefe und client_secret
  • Pip python-instagram
  • kopieren sample_app.py zu meinem Mac installieren

Ich folgte Die Anweisungen auf Sample app, ich habe meine App über Instagram erfolgreich autorisiert und versuchte dies list of examples, aber keiner von ihnen funktionierte. Nach meinem Klick ändert sich die <h2> Header und Zähler der API-Anfragen und ich sehe Remaining API Calls = 486/500.

Wenn ich versuche, eine Ausnahme KeyError: 'data' zeigt in meinem Terminal. Wenn ich try - except Konstruktion löschen, Block in try verlassen, wenn ich sehe 'Fehler: 500 Interner Server Fehler'. Hier

ist die Zurückverfolgungs:

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' 

Der gesamte Code I verwendet wird, ist aus der Probe von dem offiziellen Python-API-Client von Instagram.

Antwort

21

Es gibt eine offene Github issue für diesen Fehler wurde ein fix gesendet, aber es ist noch nicht verschmolzen.

Fügen Sie den One Line Fix zu models.py auf Ihrem installierten Paket hinzu.

Öffnen mit sudo:

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

On line 99, fügen Sie diese:

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

Correct Einbuchtung auf der nächsten zwei Zeilen:

 for comment in entry['comments']['data']: 
      new_media.comments.append(Comment.object_from_dictionary(comment)) 
+1

Das hat für mich funktioniert! Irgendein Fehler ... Ich habe es auf Python 3.4 getestet. –

+0

Es hat eine Weile gedauert, bis ich diesen Bug entdeckte und "hackte", aber ich kann ihn nicht auf unseren Dockern reparieren, weil er aus den Pip-Quellen stammt. Ich hoffe wirklich, dass sie diesen Fix in die Hauptzweig zusammenführen. – anber

+0

Ich habe auch Python-Instagram über Pip installiert, aber könnte das Problem nach @Forge Anweisung lösen. Wenn Sie 'pip uninstall python-instagram' eingeben, zeigt das System eine Liste der zu deinstallierenden Dateien mit entsprechenden Speicherorten an, einschließlich models.py. Sagen Sie "n" zu "Fortfahren (y/n)?", Um Python-Instagram NICHT zu deinstallieren, und jetzt wissen Sie, wo sich die Datei befindet. –

5

Es scheint, dass es einen Fehler in models.py gibt. Wenn Sie die Zeilen 99 und 100 in dieser Datei auskommentieren, funktioniert die "Beispiel-App" oder funktioniert zumindest. Offensichtlich ist dies keine "echte" Korrektur, aber es zeigt, dass es kein Problem mit dem Python-Beispielprogramm oder Instagram ist.

Line 99 # for comment in entry['comments']['data']: 
    Line 100 #  new_media.comments.append(Comment.object_from_dictionary(comment)) 
+0

Dieser Fix funktioniert auch für mich, aber ich hoffe, es ist nicht die "endgültige" Lösung – Stefano

1

+1 für Antwort von @forge

F oder docker Benutzer (wie in einem Kommentar gefragt), fork die Python-Instagram Repo, bearbeiten, und dann Pip-Installation über Github.

Oder einfach nur jemand anderes in Ihrem Dockerfile mit der folgenden Zeile Gabel:

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

0

Dies ist nicht wirklich eine Antwort nur eine schnelle Abhilfe auf der Antwort von @forge basierte, wenn Sie arbeiten in Umgebungen wie Docker oder in einer Umgebung ohne lesbares Terminal.

sed -i '99,100 s/^/#/' /usr/local/lib/python3.5/site-packages/instagram/models.py 
+1

Wenn es "nicht wirklich eine Antwort" ist, sollten Sie es als Kommentar hinterlassen, wenn Sie genug Reputation haben, um Kommentare zu hinterlassen. –