Der Twitter Web Service arbeitet mit einer REST- (Representational-State-Transfer-)Architektur. Einfach ausgedrückt heißt das, dass die Anfragen über den URL definiert werden. Eine Anfrage besteht bei REST aus dem Host, der die Anfrage entgegennehmen soll, der Aktion, die durchgeführt werden soll, und möglichen Parametern, die über die GET-Methode angehängt werden. Einige Funktionen benötigen zusätzlich noch eine Übergabe von POST-Parametern. Zusätzlich wird über die Anfrage noch das Rückgabeformat definiert. Hier das allgemeine Aussehen einer REST-Anfrage an den Twitter-Webservice:
http://<server>/<action>.<format><GETParameter>
Um das Twitter-API zu testen, können sie cURL (Client for URLs) verwenden. cURL ist ein Programm, ähnlich zu Wget, um Daten ohne Browser aus dem Internet zu transferieren. Im folgenden Beispiel sehen sie eine Beispielanfrage mit cURL, die die 20 letzten Meldungen eines Users im XML-Format zurückgibt:
curl -u phpmag:phpmag http://twitter.com/statuses/friends_timeline.xml
Der Parameter -u gibt dabei den Nutzernamen und das Passwort des Nutzers an, für den die letzten Meldungen angezeigt werden sollen.
Authentifizierung und Einschränkungen des Web Service
Die Authentifizierung erfolgt über HTTP und ist für alle Aktionen bis auf public_timeline erforderlich. Sie haben oben gesehen, wie die Nutzerdaten bei der Verwendung von cURL angegeben werden. Die Anfragen unterliegen dabei allerdings (auf Seiten von twitter.com) Einschränkungen, so sind nur 100 Anfragen in 60 Minuten möglich. Bei unautorisierten Anfragen werden die Anfragen pro IP gezählt und bei autorisierten pro anfragenden Nutzer.
Rückgabeformate des Web Service
Der Web Service unterstützt die folgenden Rückgabeformate:
- XML (Extensible Markup Language)
- JSON (JavaScript Object Notation)
Für die Weiterverarbeitung mit PHP eignet sich in meinen Augen JSON am besten, da es ab der PHP-Version 5.2.0 möglich ist, das JSON-Format ohne zusätzliche Bibliotheken zu verarbeiten. Dazu wird einfach die Rückgabe des Web Service an die json_decode-Funktion übergeben, diese wandelt den JSON-String dann in einen PHP-Datentyp um. Alternativ kann man auch das Rückgabeformat XML nutzen und mit einem XML-Parser wie SimpleXML (ab PHP Version 5, allerdings wegen seines APIs mitunter umstritten) verarbeiten. Für einige Funktionen, für die es sinnvoll ist, bietet das Twitter-API zusätzlich die Rückgabeformate RSS und ATOM. Mit diesen Formaten ist die Verarbeitung mit einem News Reader direkt möglich, für die Verarbeitung in einer PHP-Applikation sind diese Formate allerdings nicht geeignet.
Den Web Service mit PHP verwenden
Eine Möglichkeit, den Webservice mit PHP zu nutzen, wäre jetzt der Aufruf von cURL aus PHP heraus, dies könnte wie in Listing 1 dargestellt aussehen.
Listing 1: Aufruf des Web Services aus PHP heraus über cURL
// URL die Aktion, Authentifizierung und das Rückgabeformat angibt$strAufruf = "curl -u phpmag:phpmag http://twitter.com/statuses/friends_timeline.json";// Externer Aufruf des cURL Kommandozeilenprogrammsexec($strAufruf, $arAusgabe);// Rückgabe mit json_decode in einen PHP Objektarray dekodieren$oRueckgabe = json_decode(implode($arAusgabe));// Die erste Meldung ausgebenecho $oRueckgabe[0]->text;
Diese Lösung ist aber nicht sehr elegant, zudem unterstützt PHP cURL ab der Version 4.0.2 direkt. Der gleiche Aufruf mit der PHP-internen cURL-Funktion würde wie in Listing 2 dargestellt aussehen.
Listing 2: Aufruf des Web Services mit der PHP-internen cURL-Funktion
// Authentifizierungsdaten$username = 'phpmag';$password = 'phpmag';// URL, die die Aktion definiert$strAufrufURL = 'http://twitter.com/statuses/friends_timeline.json';// cURL initiieren$curl = curl_init();// URL angebencurl_setopt($curl, CURLOPT_URL, $strAufrufURL);// Wichtig für Anfragen bei denen der Rückgabewert verarbeitet werden sollcurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// Authentifizierung setzencurl_setopt($curl, CURLOPT_USERPWD, "$username:$password");// Rückgabe holen und dekodieren$Rueckgabe = json_decode(curl_exec($curl));// cURL schließencurl_close($curl);// Die erste Meldung ausgebenecho $Rueckgabe[0]->text;
Beide Varianten nutzen die cURL-Bibliothek, die auf dem Server installiert sein muss. Zudem muss PHP mit der Option –with-curl[=DIR] kompiliert sein. DIR zeigt dabei auf das Verzeichnis mit den cURL-Bibliotheken.
Übergabe von Parametern an den Web Service
Einige Aktionen benötigen Parameter, die über GET oder POST an den Web Service geschickt werden. Möchte man zum Beispiel seine Statusmeldung aktualisieren, so erreicht man dies mit der update-Aktion. Diese Aktion benötigt als POST-Variable status für die neue Statusmeldung. Eine solcher cURL-Aufruf mit den internen PHP-Funktionen würde wie in Listing 3 aussehen. Als Rückgabewert gibt die update-Aktion dabei die neue Meldung im angegebenen Format zurück.
Listing 3: Aktualisieren der Statusmeldung über das PHP-interne cURL
// Authentifizierungsdaten$username = 'phpmag';$password = 'phpmag';// URL, die die Aktion definiert$strAufrufURL = 'http://twitter.com/statuses/update.json';$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $strAufrufURL);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");// POST Parameter definieren und angeben$Statusmeldung = "Neue Meldung, gesetzt mit PHP und cURL ...";curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, "status=".$Statusmeldung);// Rückgabe analog zu Listing 4 verarbeiten$Rueckgabe = json_decode(curl_exec($curl));echo $Rueckgabe->text;curl_close($curl);
Welche Funktionen das Twitter-API unterstützt und welche Parameter es benötigt, können sie im Twitter-API-Wiki nachlesen.




