PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

Twitter mit PHP fernsteuern – Die Twitter-API machts möglich (Teil 1)

19 Februar, 2010 (22:25) | PHP | Von: PHP Maniac

Da Twitter ja in letzter Zeit in aller Munde ist (vorallem nachdem Google den Twitter Konkurrenten Buzz gestartet hat), möchte ich das Thema heute aus Entwicklersicht aufgreifen und mich mit der Twitter-API beschäftigen. Auf Grund der vielen unterschiedlichen Möglichkeiten, die mit Hilfe der Twitter-API realisiert werden können, werde ich das Thema als kleine Serie vorstellen und in den nächsten Tagen weitere Artikel zum Thema veröffentlichen. Am Ende der Serie soll dann ein kleines PHP-Skript entstehen, das uns einige der täglichen Arbeiten im Umgang mit Twitter abnehmen kann und leicht an eigene Anforderungen anzupassen ist.

Die Twitter-API im Überblick

Die Twitter-API lässt sich in unterschiedlichen Formaten ansprechen, zur Auswahl stehen XML, JSON und RSS. Leider ist nicht jede Methode auch in allen drei Formaten verfügbar, aber alle drei lassen sich mit Hilfe von PHP sehr einfach weiterverwenden. Abgewickelt werden alle API-Anfragen über HTTP Requests. Hierbei kommen sowohl GET- als auch POST-Anfragen zum Einsatz. Weiterhin ist der Zugriff auf viele Methoden an das Vorhandensein eines Twitter-Accounts gebunden, deren Benutzername und Passwort bei der Anfrage mit übergeben werden. Grundsätzlich benötigen alle Methoden eine Authentifizierung, die sich mit Informationen eines Twitter-Accounts beschäftigen (z.B. das Abrufen von Followern oder der Timeline). Die Twitter-API Dokumentation findet ihr übrigens unter http://apiwiki.twitter.com/

Vorbereitungen

Der Einfachheit halber werden wir für die HTTP-Anfragen an die Twitter-Server die cURL Bibliothekt, die standardmäßig als Modul in PHP integriert ist. Selbstverständlich wäre es auch möglich die bereits an anderer Stelle präsentierten HTTP-GET Requests dafür zu verwenden. Da sämtliche Interaktion mit der Twitter-API über solche Anfragen abgewickelt wird, bietet es sich an den Code für die Kommunikation als eigene Funktion zu erstellen. In einem späteren Artikel dieser Serie werden wir die so erstellten Funktionen dann in eine eigene Twitter-Klasse kapseln. Vorerst werden wir uns allerdings mit einfachen Funktionen begnügen. Die Funktion für generelle Twitter-API-Anfragen sieht wie folgt aus:

define('TWITTER_USER', 'user');
define('TWITTER_PASS', 'passwort');

function twitter_call($url, $type='GET')
{
   //cURL Handle erzeugen
   $ch = curl_init();

   //Festlegen ob ein GET- oder POST-Request gesendet wird
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);

   //URL festlegen
   curl_setopt($ch, CURLOPT_URL, $url);

   //Daten als String zurückgeben und nicht direkt an den Browser senden
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

   //Login-Informationen setzen
   curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   curl_setopt($ch, CURLOPT_USERPWD, TWITTER_USER.":".TWITTER_PASS);
 
   //URL aufrufen und XML interpretieren
   $data = simplexml_load_string(curl_exec($ch));

   //Resourcen freigeben
   curl_close($ch);

   return $data;
}

Zur Verwendung von cURL wird mit der init-Methode zunächst ein Handle erstellt, sämtliche Einstellungen können im Folgenden in diesem Handle gespeichert werden. Sollen unterschiedliche Anfragen erstellt werden, können z.B. mehrere Handles erstellt werden. Mit Hilfe des curl_setopt Befehls lassen sich dann die angesprochenen Einstellungen vornehmen. Wir wählen zunächst einen Anfragetyp (GET oder POST) und wählen als Rückgabetyp die String-Ausgabe um diese an eine Variable zu übergeben (andernfalls würde cURL die Daten direkt an den Browser ausgeben). Im Anschluss werden dann Benutzername und Passwort gesetzt bevor der Befehl dann abgesetzt wird. Sollen viele Anfragen parallel durchgeführt werden, ist es unbedingt zu empfehlen das die durch cURL belegten Resourcen mit curl_close wieder freigegeben werden. Aufmerksamen Lesern wird aufgefallen sein das wir mit dieser Funktion immer die Benutzerdaten übergeben obwohl ich oben erwähnt habe, dass nicht alle Twitter-Funktionen diese Daten benötigen. Dies ist durchaus richtig, allerdings nimmt uns Twitter das nicht übel – So lange die Daten korrekt sind, wenn sie vorrausgesetzt werden.

Der erste Kontakt

Jetzt wo die Funktion für die Kommunikation mit Twitter bereits fertig ist, möchten wir nun erstmals Kontakt zur Twitter-API herstellen. Hierzu verwenden wir die oben erstellte Funktion:

$login_info = twitter_call("http://twitter.com/account/verify_credentials.xml");

if(isset($login_info->error))
{
   echo "Login fehlgeschlagen: ".$login_info->error;
}
else
{
   echo "Login erfolgreich!<br>";
   echo "Name: ".$login_info->name."<br>";
   echo "Twitter Name: ".$login_info->screen_name."<br>";
   echo "Ort: ".$login_info->location."<br>";
   echo "Info: ".$login_info->description."<br>";
}

Zunächst sendet das obige Programm eine Anfrage an die verify_credentials.xml auf dem Twitter-Server. Die Dateiendung .xml gibt hierbei übrigens das Rückgabeformat an, wollten wir die Daten im JSON-Format erhalten, so würde einfach .json als Endung verwendet. Ob der Login erfolgreich war, lässt sich über das error-Objekt herrausfinden. Dieses enthält die jeweilige Fehlermeldung wenn ein Fehler aufgetreten ist. Ist die Anfrage erfolgreich verlaufen existiert kein error-Objekt und Twitter liefert und umfangreiche Informationen zum verwendeten Account. Zu Demonstrationszwecken gibt das Skript einige hiervon an den Benutzer aus.

Ausblick

Heute haben wir die Grundlagen für die Verwendung der Twitter-API mit PHP geschaffen. Durch die flexible twitter_call-Methode müssen wir uns in den nächsten Teilen dieser Serie nicht mehr mit der reinen Kommunikation beschäftigen, sondern können direkt neue Twitter-Funktionen in unser Programm einbauen. Im zweiten Teil der Serie werde ich zeigen wie sich die eigene Timeline, Follower und Friends des eigenen Twitter-Accounts auslesen lassen. Bald gehts weiter, stay tuned…

Be Sociable, Share!

Kommentare

Kommentar von Long Hoang
Datum 20. Februar 2010 um 18:07 Uhr

Versuch mich zurzeit selbst an der Twitter API.

Vlt solltest du noch diese Seite in deinem Artikel hinzufügen:
http://apiwiki.twitter.com/
Das ist zumind. für mich gerade die Seite bzw. Referenz überhaupt für die Twitter API 😛

Und vlt klau ich dir mal die twitter_call funktion 😛

(Kommentare abonnieren wär auch net schlecht :P)

Kommentar von PHP Maniac
Datum 20. Februar 2010 um 18:11 Uhr

Danke für das Feedback – Bei der twitter_call Funktion kannst Du dich selbstverständlich gerne bedienen, dafür ist der Code ja da 🙂

Den Link zur Twitter-API habe ich oben mal hinzugefügt, den hatte ich doch glatt vergessen. Der nächste Teil kommt übrigens Anfang nächster Woche und dann gehts ans Eingemachte, also wieder reinschauen lohnt sich 🙂

Pingback von PHP und die Twitter-API – Freunde & Follower » Follower, Funktion, Twitter-API, Teil, Hilfe, Anfrage » PHP Maniac
Datum 23. Februar 2010 um 20:03 Uhr

[…] ich im Ersten Teil von “PHP und die Twitter-API” bereits die Grundlagen für einen PHP-Zugriff auf die Twitter-API erläutert habe gehts […]

Pingback von PHP und die Twitter-API – Autofollow & Autounfollow (Teil 3) » Funktion, Teil, Twitter-API, User, Follower, Anfrage » PHP Maniac
Datum 28. Februar 2010 um 19:24 Uhr

[…] vorgestellte Wissen für eine erste kleine Twitter-Anwendung verwenden. Hierfür benötigen wir die call_twitter-Funktion aus dem ersten Teil und das im zweiten Teil besprochene Auslesen der eigenen Follower & […]

Kommentar von peter behrens
Datum 20. März 2010 um 08:12 Uhr

hallo

ich wollte die retweets zu einem betsimmten tweet zähle, aber bekomme immer nur 0 angezeigt, obwohl es rewteets gibt woran liegt das?

hab mich in der api docu un dim inet umgesehen, aber leider nichts gefunden
define(‚TWITTER_USER‘, ‚xxx‘);
define(‚TWITTER_PASS‘, ‚xxx‘);

function twitter_call($url, $type=’GET‘)
{
//cURL Handle erzeugen
$ch = curl_init();

//Festlegen ob ein GET- oder POST-Request gesendet wird
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);

//URL festlegen
curl_setopt($ch, CURLOPT_URL, $url);

//Daten als String zurückgeben und nicht direkt an den Browser senden
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//Login-Informationen setzen
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, TWITTER_USER.“:“.TWITTER_PASS);

//URL aufrufen und XML interpretieren
$data = simplexml_load_string(curl_exec($ch));

//Resourcen freigeben
curl_close($ch);

return $data;
}

$retweets = twitter_call(„http://twitter.com/statuses/retweets/10715213042.xml“);
if(isset($retweets->error))
{
echo „Anfrage fehlgeschlagen: „.$retweets->error;
}
else
{
echo count($retweets->id);
}

Kommentar von PHP Maniac
Datum 20. März 2010 um 20:08 Uhr

hallo!

das wird daran liegen, dass die antwort von twitter kein id-feld enthält. wenn du dein
echo count($retweets->id);
in
echo count($retweets->status);
umänderst sollte alles klappen. rausfinden kannst du das indem du dir die antwort mit print_r anzeigen lässt:
print_r($retweets);

Kommentar von Thomas
Datum 15. November 2010 um 20:27 Uhr

Leider bekomme ich die Fehlermeldung:
Login fehlgeschlagen: Basic authentication is not supported
Irgendeine Idee ? Danke

Kommentar von PHP Maniac
Datum 18. November 2010 um 18:32 Uhr

Twitter hat leider die Authentifizierung komplett auf OAuth umgestellt – Fürchte der Beispielcode funkioniert da generell nicht mehr 🙁

Schreibe einen Kommentar