Freitag, 25. Mai 2012


Artikel

April 2009 | Artikel

Das Twitter-API und seine Verwendung mit PHP Fortsetzung, Teil 2

Teil 1   Teil 2   

Nutzen von externen Klassen

Möchte man nun mit Twitter arbeiten, so ist es nicht zwingend notwendig, die einzelnen API-Anfragen selbst zu schreiben. Es gibt auch schon diverse Klassen, die diese Funktionalität anbieten. David Billingham stellt in seinem Blog unter blog.slawcup.com eine einfache Klasse vor, die die meisten API-Funktionen unterstützt. Die Klasse verwendet auch die cURL-Bibliotheken, gibt aber die Rückgaben als XML zurück. Wird von der PHP-Installation SimpleXML unterstützt, so wird das Ergebnis zusätzlich als SimpleXMLElement-Objekt zurückgegeben. Listing 4 zeigt die Verwendung der Klasse, um Meldungen zu lesen und zu schreiben.

Listing 4: Twitter-Klasse von David Billingham im Einsatz
  1. require_once ("twitter.class.phps");
  2. $Twitter = new twitter();
  3. $Twitter->username = "phpmag";
  4. $Twitter->password = "phpmag";
  5. // Status setzen
  6. $Twitter->update("Twitter Meldung mit der Twitter Klasse von David Billingham");
  7. // Letzte Meldung ausgeben
  8. $xml = $Twitter->friendsTimeline();
  9. echo $xml->status[0]->text;

Im PEAR (PHP Extension and Application Repository) gibt es auch ein Paket, das die Verwendung des Twitter-APIs ermöglicht. Das Paket Services_Twitter wurde von Joe Stump und David Jean Lois entwickelt und befindet sich noch im Beta-Status. Das Paket ist noch nicht in PEAR dokumentiert, aber auf den externen Projektseiten auf Google Code finden sich ein paar Beispiele. Die Anwendung ist dabei ähnlich der bereits beschriebenen Klasse, weswegen ich hier nicht näher darauf eingehen will.

Die Twitter-API-Funktionen (Auszug)

Hier sehen sie eine Übersicht über die wichtigsten Twitter-API-Funktionen. Methoden, die als Rückgabewert RSS und Atom für News Reader unterstützen, habe ich mit RSS gekennzeichnet.

Statusmethoden

  • public_timeline: Zeigt die neuesten Statusmeldungen von öffentlichen Usern an
  • friends_timeline: Zeigt die Meldungen des Users und deren Freunden an
  • user_timeline: Zeigt die letzten Meldungen eines Users an
  • show: Zeigt eine einzelne Meldung durch Angabe der Status-ID an
  • update: Aktualisiert die Meldung eines Users
  • replies: Gibt die letzten Antwortmeldungen eines Users zurück
  • destroy: Löscht eine eigene Meldung

Benutzermethoden

  • friends: Gibt die Freunde des Benutzers zurück
  • followers: Gibt die Nutzer zurück, die der Nutzer beobachtet
  • show: Gibt detaillierte Informationen über einen Nutzer zurück

Funktionen für die direkten Nachrichten

  • direct_messages: Gibt die letzten 20 Direktnachrichten zurück, die dem Nutzer geschickt wurden
  • sent: Gibt die letzten 20 Direktnachrichten zurück, die der Nutzer gesendet hat
  • new: Sendet eine Direktnachricht an einen User
  • destroy: Löscht eine Direktnachricht

Methoden für die Freundschaftsbeziehungen

  • create: Markiert zwei Nutzer als Freunde
  • destroy: Beendet eine Freundschaft zwischen zwei Nutzern
  • exists: Prüft, ob zwischen zwei Benutzern eine Freundschaft besteht
Twittern mit Zend

Wer eine Anwendung mit dem Zend Framework entwickelt, kann auch auf Zend-Funktionen zurückgreifen, um mit Twitter zu kommunizieren. Im Zend Framework gibt es dabei die Klassen aus Zend_Rest, allerdings unterstützt diese Klasse noch keine Authentifizierung. Da die REST-Architektur aber auf HTTP-Anfragen beruht, kann man auch die Klassen aus Zend_Http_Client verwenden. Listing 5 zeigt, wie man mit der Klasse Zend_Http_Client eine Anfrage an das Twitter-API stellt.

Listing 5: Anfrage an das Twitter-API mit Zend_Http_Client
  1. // Zend Klassen laden
  2. require_once('Zend/Http/Client.php');
  3. // Aktion und Rückgabeformat
  4. $strAufrufURL = 'http://twitter.com/statuses/friends_timeline.json';
  5. // Clienten initieren
  6. $http_client = new Zend_Http_Client($strAufrufURL);
  7. // Username und Passwort setzen
  8. $http_client->setAuth("phpmag", "phpmag");
  9. // Anfrage absenden und Rückgabe verarbeiten
  10. $http_response = $http_client->request();
  11. $oRueckgabe = json_decode($http_response->getBody());
  12. // Ausgabe der ersten Meldung
  13. echo $oRueckgabe[0]->text;

Der Vorteil der Zend-Klassen liegt darin, dass man die Parameter einfach über Methodenaufrufe definieren kann. Dafür gibt es die Methoden setParameterPost und setParameterGet der Klasse Zend_Http_Client. Listing 6 zeigt die Verwendung der setParameterPost-Methode, um die Mitteilung eines Benutzers zu setzen. Wichtig ist bei Anfragen, die Parameter über POST benötigen, dass man die Anfragemethode bei dem request-Aufruf mit angibt.

Listing 6: Einsatz der setParameterPost-Methode
  1. // Zend Klassen laden
  2. require_once('Zend/Http/Client.php');
  3. // Aktion und Rückgabeformat
  4. $http_client = new Zend_Http_Client('http://twitter.com/statuses/update.json');
  5. // Username und Passwort setzen
  6. $http_client->setAuth("phpmag", "phpmag");
  7. // POST Parameter angeben
  8. $http_client->setParameterPost("status", "Twitter Status neu gesetzt mit der Zend_Http_Client Klasse des Zend Frameworks");
  9. // Anfrage abschicken
  10. $http_response = $http_client->request("POST");

Im Zend Framework sind bereits spezielle Klassen für viele andere Web-2.0-Anwendungen wie Delicious oder Amazon integriert. Für das Twitter-API gibt es auch bereits eine Implementierung, die es aber noch nicht ins Framework geschafft hat. Wer die Klasse schon verwenden möchte, findet am Ende des Artikels den Link zu den Quellen im Zend-Framework-Wiki.

Fazit

Schöner Artikel?

Hat Ihnen der Artikel gefallen? Dies und mehr ist alles Teil der Ausgabe 2.09 unseres PHP Magazins. Alle zwei Monate frisch am Kiosk! Zur jeweils aktuellen Ausgabe geht es hier.

In diesem Artikel haben Sie die grundlegende Funktionsweise des Twitter-APIs kennengelernt. Als ich angefangen habe, diesen Artikel zu schreiben, habe ich mich gefragt, welchen Sinn es eigentlich macht, von einer PHP-Applikation auf die Twitter-Funktionen zuzugreifen. Beim Schreiben des Artikels sind mir allerdings zahlreiche Anwendungsfälle in den Kopf gekommen, für die sich Twitter eignen würde. Es ist doch schick, wenn man zum Beispiel in einem Onlineshop die täglichen Statistiken als Tweet lesen kann, oder auch über Tweets benachrichtigt wird, wenn Programmfehler auftreten. In einigen Ländern wie den USA, Kanada und Indien ist der automatische SMS-Versand von Tweets noch möglich, so können sich die User in diesen Ländern über SMS informieren lassen, was ihre PHP-Anwendung gerade tut.

Daniel Schmitzer ist Programmierer bei der thüringischen Internetagentur maennchen1.de, und entwickelt dort neben Typo3-Applikationen auch Web-Anwendungen mit dem Zend Framework.

  1. Twitter API Wiki
  2. Blog von David Billingham
  3. PEAR Paket Service_Twitter
  4. Services_Twitter auf Google Code
  5. Zend_Service_Twitter
  6. Zend Framework API

Teil 1   Teil 2   

Kommentare

Gravatar Tim 06.07.2009
um 21:59 Uhr
Super! Vielen dank. Hat mir SEHR geholfen!!! #zitieren
Gravatar FLHH 07.09.2009
um 16:22 Uhr
Sehr hilfreich vielen Dank! #zitieren
Gravatar Gerhard 18.10.2009
um 13:24 Uhr
Da habe ich auch noch ein super Tutorial dazu gefunden: http://www.ajaxel.de/webwissen/php/26-twitter-api-anzapfen.html #zitieren
Gravatar Jürgen Schulze 15.03.2010
um 16:01 Uhr
Danke für die kleine Einführung.
Aber wahrscheinlich werde ich doch auf eine fertig Twitter-Klasse zurückgreifen.
#zitieren
Gravatar kony1994.co.cc 16.03.2010
um 21:58 Uhr
Danke, hat mir sehr gut geholfen! #zitieren
Gravatar Marco 20.04.2010
um 18:01 Uhr
Hi,
das sind ja alles beispiele iwe ich vom eigenen account daten abrufe, wie mache ich das jedoch wenn ich von einem anderen User die Daten möchte.
Sprich, ich möchte Aktuelle Tweets von einem User X abrufen und anzeigen lassen?
#zitieren
Gravatar Webdesigner 26.04.2010
um 13:52 Uhr
Wie liest man anhand des Usernames einen Twitter-Stream aus, ohne sich mit Passwort anzumelden, ist das überhaupt möglich? #zitieren
Gravatar Bronco 29.04.2010
um 16:15 Uhr
Das ist das Handwerkszeug um den REST Service in PHP anzufragen.
Bei Fragen zur API sollte man diese bemühen!
http://apiwiki.twitter.com/Twitter-API-Documentation

Da findet man auch das folgende:
http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=[User]
Alternativ dann mit .json statt .xml bevor jemand fragt wie man den dann das xml verarbeiten kann.
#zitieren
Gravatar Frank 06.05.2010
um 10:41 Uhr
Danke für diese Doku - hat mir geholfen... #zitieren
Gravatar MyXoToD 10.08.2010
um 09:23 Uhr
Vielen dank, hat mir weitergeholfen. #zitieren
Gravatar Mausi 14.09.2010
um 15:48 Uhr
ps. gibt es inzwischen eine Neufassung hier zu wegen "Basic authentication is not supported" -> http://www.seoratio.de/twitter-api-umstellung/ ? #zitieren
Gravatar Bronco 14.09.2010
um 15:56 Uhr
Da hast Du doch schon die Lösung gepostet? Was brauchst Du denn da noch?
An der OAuth Anmeldung kommst Du nicht vorbei, aber der Link beinhaltet doch ein Tutorial.
#zitieren
Gravatar Mausi 14.09.2010
um 16:02 Uhr
... ja, sorry. Manchmal ist man echt verpeilt :) #zitieren
Gravatar Klaus-Dieter 13.03.2011
um 11:52 Uhr
Die Dokumentation ist sehr gut und verständlich, aber : Einige Hoster unterstützten ( aus Sicherheitsgründen ?? ) kein curl.
Was macht man dann ?
Danke für Tipps.
#zitieren