Twitter Nachrichten in Echtzeit auswerten

Mi, 21.04.2010 - 13:40 -- admin

Twitter gehört zu den neuen Web 2.0 Diensten, die auf den ersten Blick für einen ehr nutzlos erscheinen. Doch werden dort mittlerweile so viele Statusnachrichten (Tweets) verschickt, dass man hiermit ein paar Interessante Dinge in Echtzeit auswerten kann. Die API Schnittstelle von Twitter hilft einem wirklich sehr gut weiter. Es gibt ein sogenanntes Streaming, man baut eine einfache http Verbindung zum Twitter Server auf und bekommt jede neue öffentliche Statusnachricht zugeschickt, die man dann weiter auswerten kann.

API-Schnittstelle

Die Twitter API bietet einige fertige realtime Filter als auch die Public-Timeline (alle neuen Tweets) an, die man über unterschiedliche Links ansprechen kann. Nutzen lassen sich die allerdings nicht alle, da diese meist für Partner und nur für spezielle Anwendungen freigegeben werden. So erhält man hier eine folgende Meldung:

HTTP request failed! HTTP/1.1 403 User not in required role

Beispiel URLs

  • http://stream.twitter.com/1/statuses/sample.json (default von Phirehose)
  • http://stream.twitter.com/1/statuses/filter.json?track=winter,summer (Alle Tweets mit winter und summer)
  • http://stream.twitter.com/1/statuses/links.json (Nur Tweets mit URLs, nur nach Freigabe)

Auslesen mit PHP

Will man jedoch sämtliche neuen Tweets auswerten so kann man aktuell Phirehose nutzen. Es ist ein einfaches PHP Skript, welches sämtliche neue weltweiten Tweets in Echtzeit zur Verfügung stellt (über einen kleinen Trick). Auch Filter und Suchwörter lassen sich übergeben, so dass die Tweets bereits von Twitter gefiltert werden.
Ich habe das gute Stück einfach mal ohne Filter eine gewisse Zeit rennen lassen und bin auf ca. 30 Tweets pro Sekunde gekommen, das macht dann pro Tag eine Anzahl von 25 Mio Tweets, also schon sehr ordentlich. Es könnte gut sein, dass man hier keine neue Tweets verliert, aber genaue Zahlen gibt es natürlich nicht.

require_once('Phirehose.php');
/**
 * Example of using Phirehose to display the 'sample' twitter stream. 
 */
class SampleConsumer extends Phirehose {
  public function enqueueStatus($status)  {
     #decode incoming message
      $data = json_decode($status, true);
 
     #append raw message to file
      file_put_contents(date("YmdH") . '.txt',$status,FILE_APPEND);
 
  }
}
 
// Start streaming
$sc = new SampleConsumer('username', 'pass', Phirehose::METHOD_SAMPLE);
$sc->consume();

Wer es einfach haben will kann natürlich auch folgende Funktion nutzen. Erläuterungen und ein paar Erweiterungen z.B. automatischer Reconnect gibt auf dieser Seite in dem Kommentaren.

$fp = fopen("http://username:pass@stream.twitter.com/1/statuses/filter.json?track=winter,summer" . $url,"r");
while($data = fgets($fp))
{
    $time = date("YmdH");
    if ($newTime!=$time)
    {
        @fclose($fp2);
        $fp2 = fopen("{$time}.txt","a");
    }
    fputs($fp2,$data);
    $newTime = $time;
}

Andere Sprachen

Für sämtliche Programmiersprachen Java, C#, .NET und co. gibt es mittlerweile fertige Libraries / Frameworks, die auf der offiziellen Twitterseite aufgelistet sind.