Pixelfans

16 Mar 2009

Twitter mit PHP in eigener Website nutzen

Twitter ist ein großartiger Webdienst. Man könnte ihn als Mischung aus Miniblog und Sammel-SMS bezeichnen. Kurz gesagt, kann ich andere daran teilhaben lassen, was ich gerade so tue oder denke. Wir sind davon bei Pixelfans so begeistert, dass wir jeweils immer den aktuellsten Beitrag von Carsten oder mir auf dieser Website einbinden.

Twitter hat natürlich eine API, die auch gut dokumentiert ist. In der Dokumentation findet der begeisterte Neutwitterianer unter dem Punkt The Easiest Way to Play around with the Twitter API folgendes:

get the public timeline in RSS format, unauthenticated: curl "http://twitter.com/statuses/public_timeline.rss"

Sieht simpel aus und es funktioniert auch in der Konsole, wenn man auf seinem Betriebsystem CURL installiert hat. RSS-Abruf von der KonsoleUm es auf einer Website zu nutzen, muss es aber mit PHP zusammen spielen.

CURL ist in den meisten PHP-Installationen enthalten. Das o.g. Beispiel würde in PHP wie folgt aussehen:

<?php
function twitter($url) {
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
return $response;
}

$url="http://twitter.com/statuses/public_timeline.xml";
$xml = twitter($url);
echo "<pre>";
echo htmlentities($xml);
echo "</pre>";
}
?>

Nicht wirklich schwer, aber doch etwas umfangreicher als in der offiziellen Dokumentation.Das Tolle ist, das man keinen API-Schlüssel oder ähnliches braucht, in der o.g. Form benötigt man noch nicht einmal einen Twitter-Account. Nun möchte nicht jeder jede öffentliche Twitternachricht einbinden. Praktischer ist es nur seine eigenen Nachrichten bzw. die seiner Freunde einzubinden. Dazu muss das Beispiel nur leicht abgeändert werden.

Zunächst sollte Sie sich aber den Output ansehen.

<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
<created_at>Mon Mar 16 12:51:46 +0000 2009</created_at>
<id>1336057454</id>
<text>Gehe Mittagessen kaufen&#8230;</text>
<source>&lt;a href="http://www.twhirl.org/"&gt;twhirl&lt;/a&gt;</source>
<truncated>false</truncated>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name></in_reply_to_screen_name>
<user>
<id>...</id>
<name>...</name>
<screen_name>...l</screen_name>
<location>Halle, Germany</location>
<description>...</description>
<profile_image_url>...</profile_image_url>
<url>http://www.pixelfans.de</url>
<protected>false</protected>
<followers_count>2</followers_count>
</user>
</status>
...

Soweit die Struktur des Dokuments. Die Twitter-API kann aber die meisten geüwnschten Formate zurückliefern. Soll die Antwort mit Javascript weiter verwendet werden, bietet sich JSON an.

<?php
function twitter($url) {
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);

Freunde müssen natürlich einen bestimmten Nutzer zugeordnet werden. Deshalb ist die Angabe von Nutzernamen und Passwort, die durch ":" getrennt werden erforderlich.

 curl_setopt($curl_handle, CURLOPT_USERPWD, "Twitter_screen_Name:Passwort");
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
return $response;
}
$url="http://twitter.com/statuses/friends_timeline.xml";

Wir nutzen jetzt SimpleXML für die Verabeitung der XML-Rückgabe. Dieses ist ab PHP 5 verfügbar.

$xml = simplexml_load_string(twitter($url));
foreach($xml->status as $status) {
echo "<strong>";
echo $status->user->name;
echo ":</strong> ";
echo $status->text;
echo "<hr />";
}
?>

Wozu sollten Sie sich den HTML-OUtput des ersten Beispiels ansehen? Richtig, um die Struktur des Dokumentenbaums zu verstehen und um damit Zugriff auf jedes Kindelement zu erlangen.

Wer Twitter umfangreicher nutzen möchte, dem sei nätürlich die Klasse twitter.lib.php empfohlen. Diese kann auch mit PHP4 genutzt werden, dazu ist es aber nötig, die private-Deklarationen zu löschen.

Für viele CMS sind natürlich Plugins u.ä. bereits fix und fertig nutzbar. Exemplarisch sei hier auf das Plugin für Expression Engine und die library für CodeIgniter verwiesen.

geschrieben von Pawel


Kommentare

carsten's Foto

Für alle, die noch auf PHP4 angewiesen sind, gibt’s bei Frank Bueltge eine gute Alternative zur Nutzung von simpleXML.

geschrieben von am 20.03.09

Pawel's Foto

Guter Hinweis, die Verarbeitung des XML, muss ja auch bei den oben genannten Bibliotheken erfolgen.

geschrieben von am 26.03.09

Kommentar verfassen

Dieser Eintrag kann nicht mehr kommentiert werden.