Das Folgende ist ein Gastbeitrag von Emerson This. Dies ist eine Anleitung für Webentwickler, die daran interessiert sind, Instagram-Inhalte auf Websites zu integrieren. Es ist erst wenige Monate her, dass Instagram die Möglichkeiten seiner API geändert hat. Dieser Beitrag erklärt daher, was jetzt möglich ist und gibt Beispiele für diese Möglichkeiten.
- Teil Eins bietet eine kurze Übersicht über die API-Einschränkungen, die im Juni 2016 in Kraft traten und das Spielfeld erheblich verändert haben.
- Teil Zwei befasst sich damit, wie man mit der API beginnt.
- Teil Drei enthält Beispiele für reale Dinge, die Sie mit der API tun können (und nicht können).
Teil Eins: Die Instagram-API in drei Minuten verstehen
Um mit der Instagram-API zu arbeiten, müssen Sie früher oder später den nebulösen Registrierungs- und Autorisierungsprozess für API-Clients durchlaufen. Das Verständnis der API-Zugriffsbeschränkungen kann viel Zeitverschwendung verhindern, da sie oft zu unerwarteten Daten führen und nicht zu direkten Authentifizierungsfehlern, die leichter zu diagnostizieren sind.
Die berüchtigten API-Beschränkungen vom Juni 2016
Am 1. Juni 2016 leuchteten weltweit Fehlermeldungen in der Konsole auf, als Instagram den Zugriff auf seine API erheblich einschränkte. Das erste, was man verstehen muss, ist, dass dies eine bewusste Geschäftsentscheidung von Instagram war, die darauf abzielte, die Nutzung seiner API für verschiedene Zwecke zu verhindern. Wenn man diese Tatsache versteht, werden die Fehlermeldungen in der Konsole nicht behoben, aber die Einschränkungen sind intuitiver zu umgehen, wenn man ihre Absicht versteht.
Sandbox-Modus vs. „Live“-Modus
Der Torwächter zwischen Entwicklern und vollem API-Zugriff wird Sandbox-Modus genannt. Die Dokumentation präsentiert ihn als einen vorübergehenden Schritt im Entwicklungsprozess, aber die überwiegende Mehrheit der Projekte wird den Sandbox-Modus niemals verlassen, da Instagram vollen Zugriff auf seine API nur für eine Handvoll sehr spezifischer Anwendungsfälle gewährt.
- „Meine App ermöglicht es Benutzern, sich mit Instagram anzumelden und ihre eigenen Inhalte zu teilen.“
- „Mein Produkt hilft Marken und Werbetreibenden, ihr Publikum und ihre Medienrechte zu verstehen und zu verwalten.“
- „Mein Produkt hilft Sendern und Verlagen, Inhalte zu entdecken, digitale Rechte an Medien zu erwerben und Medien mit ordnungsgemäßer Namensnennung zu teilen.“
Wenn Sie die Instagram-Lords nicht davon überzeugen können, dass Ihre App einem dieser spezifischen Zwecke dient, wird sie abgelehnt, wenn Sie sie zur „Live-Schaltung“ einreichen. Aus diesem Grund mag es intuitiver sein, sie als „Seitenlinien-Modus“ zu betrachten.
Was können Sie im Sandbox-Modus tun?
Sandbox-Modus bedeutet, dass Ihre API-Aufrufe zu einer magischen Insel gehen, auf der nur Ihre letzten 20 Beiträge existieren. Das ist alles. Niemand sonst existiert auf der Insel, daher werden Sie keine Ergebnisse für etwas sehen, das Sie früher gepostet haben, oder von anderen Instagram-Nutzern, selbst wenn diese Inhalte öffentlich sind. Sie können zusätzliche „Sandbox-Benutzer“ einladen, die sie zu Ihrer magischen Insel hinzufügen, aber genau wie bei Ihnen existieren auch von ihnen nur die letzten 20 Beiträge auf der Insel.

Die Insel wird niemals sehr groß, da Sie nur insgesamt zehn Sandbox-Benutzer haben können. Lassen Sie dies einen Moment auf sich wirken. Alles, was Sie tun möchten und das Inhalte aus der allgemeinen Öffentlichkeit betrifft, ist im Sandbox-Modus nicht möglich.
Sandbox-Modus vs. Scopes
Eine der häufigsten Verwechslungen bezüglich der neuen Einschränkungen ist die Vermischung von Scopes und Sandbox-Modus. Der Sandbox-Modus bestimmt, was Ihre API-Anfragen „sehen“ können, und leitet sie zur magischen Insel um. Scopes bestimmen, wofür ein bestimmter Token verwendet werden kann und wofür nicht. Jeder Token beginnt automatisch mit dem `basic`-Scope. Ein Token mit nur dem `basic`-Scope kann sehr wenig tun, egal ob im Sandbox-Modus oder im Live-Modus. Um auch öffentliche Inhalte anzuzeigen, müssen Sie den zusätzlichen `public_content`-Scope anfordern. Wo der Sandbox-Modus ins Spiel kommt, ist die Bestimmung, was in „öffentlichen Inhalten“ enthalten ist. Im Sandbox-Modus werden nur die Beiträge auf der magischen Insel einbezogen, während eine Live-App alles sehen kann, was auf Instagram öffentlich ist (in der realen Welt).
Die häufigste Fehlannahme ist, dass eine App genehmigt werden muss, um „live zu gehen“, um Scopes anfordern zu können. Das ist falsch. Zum Beispiel benötigen Sie im Sandbox-Modus einen Token mit dem `public_content`-Scope, um Beiträge Ihrer anderen Sandbox-Benutzer sehen zu können, genau wie genehmigte („Live“)-Apps es tun1. Technisch gesehen gibt es nichts, was eine Live-App tun kann, das nicht im Sandbox-Modus getan werden kann, solange es sich nur um Benutzer und Inhalte handelt, die auf der magischen Insel leben.
Vorsicht vor alten Dokumentationen!
Es ist auch erwähnenswert, dass vor Juni 2016 viele API-Aufrufe eine Authentifizierung nur mit einer `client_id` von einem registrierten Client erlaubten. Jetzt benötigen *alle* Anfragen einen `access_token`. Es gibt jedoch immer noch viele Plugins, Dokumentationen und Tutorials von vor dem 1. Juni, die noch nicht entsprechend aktualisiert wurden.
Teil Zwei zeigt, wie man innerhalb der API-Beschränkungen arbeitet, um die beliebten Instagram-Integrationen einzurichten, die im Sandbox-Modus noch möglich sind.
Teil Zwei: Wie man die Instagram-API auf Websites verwendet
Registrierung eines API-Clients
Bevor Sie etwas mit der Instagram-API tun können, müssen Sie sich als Entwickler registrieren und einen API-Client registrieren. Wenn Sie noch nicht als Entwickler registriert sind, werden Sie aufgefordert, dies zu tun, bevor Sie mit der Registrierung eines neuen API-Clients fortfahren.

Der heikelste Teil der Konfiguration eines API-Clients ist die Eingabe der korrekten Werte im Feld Gültige Weiterleitungs-URIs. Dies ist eine Whitelist von URIs, die Instagram während des Authentifizierungs-Workflows verwendet. Der URI-Abgleichsalgorithmus ist sehr streng. Sie müssen also sicherstellen, dass eine der hier eingegebenen URIs *exakt* mit der URI übereinstimmt, die Sie im Parameter `redirect_uri` bei der Anforderung eines Tokens übergeben (weiter unten beschrieben). Wenn Sie beispielsweise `http://mysite.com/oauth` eingeben und dann versuchen, ein Token mit `mysite.com/oauth` oder `http://mysite.com/oauth/` anzufordern, schlägt dies fehl.
Ein registrierter API-Client erhält eine `client ID` und ein `client secret`. Wie der Name schon sagt, sollten Sie Ihr Client-Secret nicht weitergeben. Sie werden beide verwenden, um Tokens von Instagram anzufordern.
Generierung eines Zugriffstokens
Wie oben erwähnt, müssen Sie ein Token generieren, um Anfragen an die Instagram-API zu authentifizieren. Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun: Sie können Tokens programmatisch oder manuell anfordern. Beide Ansätze erfordern, dass Sie zuvor einen API-Client registriert haben (wie oben beschrieben).
Instagram-Tokens programmatisch mit dem OAuth 2.0-Workflow generieren
Instagrams Implementierung von OAuth 2.0 ist sehr standardmäßig. Wenn Sie also Erfahrung mit diesem Authentifizierungsmuster haben, wird es Ihnen sehr vertraut vorkommen. Es gibt gute Dokumentationen in den offiziellen Dokumenten, die die genaue Abfolge von Anfragen und Parametern durchlaufen. Hier ist eine kurze Zusammenfassung:
- Leiten Sie Ihren Benutzer zur Instagram-Autorisierungs-URL weiter
- Der Benutzer erteilt die Autorisierung
- Instagram leitet den Benutzer mit einem Code zurück zu Ihrer Website
- Senden Sie den Code zurück an Instagram im Austausch für das Token
Instagram-Tokens manuell generieren
In Situationen, in denen Sie nicht dynamisch auf die API als verschiedene Benutzer zugreifen müssen, können Sie ein Token manuell generieren.
Wenn Sie ein Tool zum Ausführen von POST-Anfragen haben und einen öffentlichen Endpunkt eingerichtet haben, um die Weiterleitung von Instagram zu empfangen, *könnten* Sie ein Token generieren, indem Sie jede Anfrage in der vorherigen Sequenz manuell ausführen. Dies kann jedoch mühsam sein, insbesondere für ein kleines Projekt, bei dem Sie nur ein Token benötigen.
Der einfachste Weg, dies zu tun, ist die Verwendung eines Token-Generierungs-Tools wie diesem. Vor den Einschränkungen vom Juni 2016 gab es viele solcher Ressourcen zur Auswahl, aber Sie werden feststellen, dass viele von ihnen mit Beginn der Einschränkungen kaputtgegangen sind. InstagramToken.com funktioniert immer noch und ermöglicht es Ihnen auch, Tokens mit spezifischen Scopes (in Teil Eins erklärt) zu generieren, was wichtig ist, wenn Sie etwas anderes tun möchten, als Ihre eigenen Inhalte abzurufen.
So laden Sie Sandbox-Benutzer ein
Sandbox-Benutzer sind andere Instagram-Benutzer, die Sie zu Ihrem Client einladen. Der Hauptgrund dafür ist, dass Ihre App dann zusätzlich zu Ihren eigenen die letzten zwanzig Beiträge von ihnen „sehen“ kann. Dies wird unter Sandbox-Modus vs. „Live“-Modus oben erklärt.
Sie laden Sandbox-Benutzer über den Tab Sandbox in der Benutzeroberfläche zur Bearbeitung von Clients ein.

Ein paar kurze Anmerkungen zum Verhalten beim Einladen von Sandbox-Benutzern (gültig ab 28. August 2016):
- Eingeladene erhalten keine Benachrichtigung, wenn Sie sie eingeladen haben2. Sie müssen sie bitten, sich bei Instagram anzumelden und dann diese Seite zu besuchen. Dort müssen sie ein kurzes, vages Formular ausfüllen, um sich als Entwickler zu registrieren. Wenn sie keine Entwickler sind, werden sie von diesen Fragen verwirrt sein. Glücklicherweise scheinen die Antworten keine Rolle zu spielen.
- Es kann auch sein, dass sie Ihre Einladung gar nicht annehmen müssen. Derzeit müssen „Sandbox-Benutzer“ die Einladung nicht annehmen, um ihre Inhalte über einen Client im Sandbox-Modus anzeigen zu können. Es scheint zu funktionieren, auch während ihre Einladung noch „ausstehend“ ist.
Eine kurze Sicherheitswarnung: Es ist im Allgemeinen keine gute Praxis, clientseitige Anfragen mit einem API-Token zu stellen, da es wie ein Passwort ist und von einem böswilligen Benutzer leicht aus dem Quellcode gelesen werden kann. Im Sandbox-Modus können die Tokens jedoch nur sehr wenig tun, daher sind die Risiken ziemlich gering.
So finden Sie Ihre Benutzer-ID
Es ist überraschend schwierig, die numerische ID eines Benutzers zu finden, die für viele beliebte Arten von Anfragen notwendig ist. Es gab eine Handvoll Online-Ressourcen, die dazu dienten, dies zu erleichtern, aber die meisten waren zum Zeitpunkt des Schreibens dieses Artikels kaputt. Smash Balloon hat ein kostenloses Tool, das im Moment zu funktionieren scheint. Es ist auch nicht sehr schwierig, eine ID selbst zu finden, wenn man weiß, wo man suchen muss.Jetzt ist auch dieses tot. FindInstaID scheint zu funktionieren.
Um die numerische Instagram-ID eines Benutzers zu finden, besuchen Sie zuerst die öffentliche Instagram-Seite des Benutzers: `https://instagram.com/


Kurz gesagt, die API vom Juni 2016 hat all unsere Bemühungen, nützliche Drittanbieter-Tools zu erstellen, im Wesentlichen zunichte gemacht. Schade.
Etwas über Nägel, Köpfe und einen Hammer.
Ich bin kein Verschwörungstheoretiker. Aber ich habe das Gefühl, dass es dafür einen Endgegner geben muss. Vielleicht ein unterstützter Partner, der Instagram-Analysen sammelt, die irgendwo ein Stück vom Kuchen vermissen.
Ich wünschte, die Einschränkungen wären dazu gedacht, Spam auf Instagram zu bekämpfen, aber es ist in den letzten zwei Monaten überhaupt nicht besser geworden. Ich melde Spam-Konten, die versuchen, mir zu folgen, fast täglich.
Guter Beitrag.
Ist es also immer noch unmöglich, die API zu verwenden, um neue Inhalte auf meiner eigenen Timeline zu posten? Irgendeine Idee hinter Instagrams Logik dazu? Toller Beitrag übrigens, Emerson.
Wirklich, ich hasse es… Alles, was ich wirklich tun möchte, ist, Statistiken über mein Konto abrufen zu können… Follower, die Gesamtzahl der Fotos – einfache Dinge.
Instagramtoken.com sagt
„https:instagramtoken.com/ (genau wie geschrieben) muss eine „Gültige Weiterleitungs-URI“ für Ihren Client sein.“
Instagram sagt
„Sie müssen eine absolute URI eingeben, die mit http:// oder https:// beginnt.“
Irgendwelche Vorschläge zum //?
Danke für die Zusammenstellung einer Anleitung mit den neuesten Informationen zu Instagram-Feed-Lösungen und -Richtlinien.
Ich denke, es lohnt sich, darauf hinzuweisen, dass Tokens abzulaufen scheinen, wenn ein Benutzer sein Passwort ändert oder wann immer Instagram dies bestimmt (da die Token-Ablaufzeit nie angezeigt wird) und ohne Benachrichtigung… gemäß ihren Dokumenten…
„Obwohl unsere Zugriffstoken keine Ablaufzeit angeben, sollte Ihre App den Fall behandeln, dass entweder der Benutzer den Zugriff widerruft oder Instagram das Token nach einiger Zeit ablaufen lässt. Wenn das Token nicht mehr gültig ist, enthalten API-Antworten einen „error_type=OAuthAccessTokenError“. In diesem Fall müssen Sie den Benutzer erneut authentifizieren, um ein neues gültiges Token zu erhalten.
Mit anderen Worten: Gehen Sie nicht davon aus, dass Ihr access_token für immer gültig ist.“
Ich kann also im Grunde nur hoffen, den Fehler abzufangen und entsprechend zu handeln. Und erst wenn ich feststelle, dass er abgelaufen ist (da Instagram Ihnen keine Benachrichtigung darüber gibt, warum sollten sie auch, oder?), muss ich mein Token manuell aktualisieren und meine clientseitigen Token-Details entsprechend aktualisieren. Es scheint, dass es keine Möglichkeit gibt, dies zu 100 % programmatisch zu aktualisieren, da Sie immer den Benutzer zur Authentifizierung benötigen, was eine echte Plage ist.
Mit einer Lösung wie instafeed.js kann ich den 'error:'-Aufruf verwenden und einige JS-Sachen tun, um entweder das Widget auszublenden, damit ich nichts Kaputtes anzeige, oder vielleicht einen Platzhalter mit statischen Inhalten anzuzeigen, bis ich feststelle, dass es abgelaufen ist.
Leider kann ich nur clientseitige Implementierungen durchführen, und diese Token-Ablaufzeiten scheinen so zufällig und unbekannt zu sein, dass es wie ein Wartungsalbtraum aussieht.
Hat jemand eine bessere Lösung für den Umgang mit ablaufenden Tokens gefunden? Ich finde einige Plugins und Drittanbieterlösungen, die damit werben, Ihren Feed auf Ihrer Website abzurufen, aber sie müssen auf die gleichen Einschränkungen stoßen... wie gehen sie mit unerwartet abgelaufenen Tokens um? Ich glaube nicht einmal serverseitige Implementierungen sind von der manuellen Token-Aktualisierung befreit, wenn sie ablaufen....