© saicle/Shutterstock.com
Entwickeln mit dem Twitter API

Meine App zwitschert


Der Kurznachrichtendienst Twitter hat mittlerweile seinen Platz im Social Web gefunden. Neuigkeiten verbreiten sich in Windeseile, und für Unternehmen bietet sich Twitter als unkomplizierter Kommunikationskanal an, um mit Kunden in Kontakt zu treten. Das offene und sehr mächtige API hat eine Vielzahl von Twitter-Clients über alle Plattformen hinweg hervorgebracht und ermöglicht eine einfache Integration des Dienstes in eigene Anwendungen.

Twitter bietet ein gut dokumentiertes REST API für die Interaktion mit dem Dienst an. Möchte man eigene Twitter-fähige Anwendungen entwickeln, ist die API-Dokumentation eine erste Anlaufstelle und ein ergiebiges Nachschlagewerk gleichermaßen [1]. Sie gibt einen Überblick über die abfragbaren REST-Ressourcen sowie die von Twitter in den Antworten verwendeten Objekte. Über ein kleines Werkzeug kann man sich zudem für jede Ressource eine Beispielanfrage generieren lassen. Grundlegendes Feature des API ist natürlich das Abfragen von Timelines jeglicher Art:

  • Home Timeline: Diese Timeline enthält Tweets aller Twitter-Konten, denen der Benutzer folgt. Diese entspricht der Ansicht, die ein Twitter-Nutzer erhält, gleich nachdem er sich auf twitter.com in sein Konto eingeloggt hat.

  • User Timeline: Hier werden alle Tweets aufgeführt, die über ein bestimmtes Twitter-Konto veröffentlicht wurden. Das schließt insbesondere auch Antworten ein, die in anderen Timelines in der Regel verborgen werden.

  • Listen: Um nicht den Überblick zu verlieren, bietet Twitter die Möglichkeit, Listen von Twitter-Konten anzulegen. Auch die Timeline dieser Listen kann natürlich abgefragt werden.

Weitere Funktionen, auf die man über das API Zugriff hat, sind unter anderem folgende:

  • Erstellen und Löschen von eigenen Tweets

  • Auslesen und Absetzen von Direktnachrichten

  • Folgen beziehungsweise Entfolgen von Twitter-Konten

  • Markieren von Tweets als Favoriten beziehungsweise Entfernen dieser Markierung

  • Erstellen, Löschen und Verwalten von Listen

  • Auslesen und Ändern der meisten Profileinstellungen

  • Abfragen der Geodatenbank von Twitter

  • Blockieren von anderen Twitter-Konten

  • Melden eines Spammers

Eine erste Anfrage

Für den Anfang wollen wir einmal die neusten Tweets des PHP Magazins holen. Hierfür fragen wir die Ressource statuses/user_timeline ab. Da dies eine einfache GET-Anfrage ist, können wir sie auch einfach im Browser ausführen:

https://api.twitter.com/1/statuses/user_timeline.json?screen_name=phpmagazin

Wir erhalten ein JSON Array mit Objektrepräsentationen der letzten zwanzig Tweets des Twitter-Kontos @phpmagazin. Neben dem eigentlichen Inhalt sind auch Metainformationen über den Tweet enthalten, zum Beispiel die ID des Tweets, der Zeitpunkt der Veröffentlichung, der Verfasser des Tweets als Userobjekt und sofern vorhanden der Standort des Benutzers. Hängt man noch den Parameter include_entities=1 an, so erhält man zusätzlich Informationen über eventuell enthaltene Links, Hash Tags und Erwähnungen anderer Twitter-Konten (Mentions) inklusive Start- und Endposition, was unter anderem zum Rendern der Tweets hilfreich ist. So einfach diese Abfrage auch war: Sie enthält bereits potenziell alle Objekte, die unsere Anwendung kennen muss: Tweets, Users, Entities und Places.

Nun wollen wir die Timeline von @phpmagazin gerne im Auge behalten, um neue Tweets zeitnah in unserer Anwendung darstellen zu können. Hierzu fragen wir das API in regelmäßigen Abständen nach neuen Tweets, indem wir an den Anfrage-URL noch den Parameter since_id mit der ID des neusten, uns bekannten Tweets anhängen. Solange keine neuen Tweets veröffentlicht wurden, erhält man ein leeres Array. Die Häufigkeit der Anfragen sollte hier wohldosiert sein, da Twitter von dieser Art Anfrage maximal 150 Stück pro Stunde und IP-Adresse zulässt. Hierzu später mehr.

Wenn wir ältere Tweets als die gelieferten haben möchten, können wir auch durch die Timeline blättern. Hierzu lesen wir die ID des ältesten uns bekannten Tweets aus und hängen sie mit dem Parameter max_id an unsere ursprüngliche Anfrage an. Hierbei würden wir jedoch eben diesen Tweet noch einmal erhalten, was nicht schlimm, aber unnötig ist. Da die ID eines Tweets jedoch eine laufende Nummer ist – ältere Tweets haben kleinere IDs als neuere –, können wir uns diese Eigenschaft zunutze machen und vorher 1 von der zu übergebenden ID abziehen. Twitter stört es in diesem Fall nicht, dass wir eine ID angeben, die auf der Timeline potenziell gar nicht auftauchen wird. So weit, so unspektakulär: Wir haben lesend auf ohnehin öffentlich zugängliche Daten anonym und ohne jeglichen Benutzerbezug zugegriffen. Das wollen wir nun ändern, weshalb wir uns zuerst einmal die Authentifizierung für Twitter-Anwendungen ansehen.

Twitter und OAuth

Eine authentifizierte Twitter-Anwendung handelt immer im Namen eines Benutzers beziehungsweise eines Twitter-Kontos. Einmal für ein Twitter-Konto autorisiert, soll die Anwendung so lange Zugriff auf selbiges erhalten, bis der Benutzer ihr die Zugriffsrechte wieder entzieht – und das alles, ohne das Kennwort des Benutzers kennen zu müssen. Diese Anforderung erfüllt das Protokoll OAuth, dessen Version 1.0A bei Twitter zum Einsatz kommt.

OAuth selbst ist eine kleine Wissenschaft für sich und soll hier nicht erschöpfend behandelt werden. Dem interessierten Leser sei an dieser Stelle jedoch der Artikel in Ausgabe 4.2012 des PHP Magazins ans Herz gelegt, der die Funktionsweise des Protokolls anschaulich erklärt [2]. Für den Einsatz in PHP empfiehlt sich die Nutzung einer bestehenden OAuth-Bibliothek wie die von Matt Harris [3] oder die für die folgenden Beispiele eingesetzte PECL-Erweiterung [4].

Erster Schritt zur Nutzung von OAuth ist die Registrierung unserer Anwendung bei Twitter [5]. Hierzu möchte Twitter den Namen, eine Kurzbeschreibung und einen Webseiten-URL wissen. Name und URL werden später mit jedem Tweet, der über unsere Anwendung veröffentlicht wurde, mitgeschickt. Die Kurzbeschreibung wird dem Benutzer im Autorisierungsdialog angez...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang