2009-07-31 11 views
7

Es gibt eine Familie von Methoden (birddog, shadow, and follow) in der Twitter-API, die eine (meist) permanente Verbindung öffnet und Ihnen erlaubt, vielen Benutzern zu folgen. Ich habe den Beispielverbindungscode mit cURL in bash ausgeführt, und es funktioniert gut: Wenn ein Benutzer einen Tweet schreibt, erhalte ich einen XML-Stream in meiner Konsole.Wie mit Streaming-Daten in PHP umgehen?

Meine Frage ist: Wie kann ich auf Daten mit PHP zugreifen, die nicht als direkter Funktionsaufruf zurückgegeben wird, aber wird gestreamt? Diese Daten kommen sporadisch und unvorhersehbar, und es ist nicht etwas, mit dem ich jemals fertig wurde, noch weiß ich, wo ich anfangen soll, nach Antworten zu suchen. Irgendwelche Ratschläge und Beschreibungen von Bibliotheken oder Fallen würden geschätzt werden.

Antwort

6

fopen und fgets

<?php 
$sock = fopen('http://domain.tld/path/to/file', 'r'); 
$data = null; 
while(($data = fgets($sock)) == TRUE) 
{ 
    echo $data; 
} 
fclose($sock); 

Dies ist keineswegs groß (oder sogar gut) Code, aber es sollte bieten die Funktionalität, die Sie benötigen. Sie müssen unter anderem Fehlerbehandlung und Datenanalyse hinzufügen.

+1

Hinweis Stream-Unterstützung fopen wurde() in PHP 5.0 so müssen Sie zumindest das. – UnkwnTech

0

Ich würde vorschlagen, mit AJAX zu untersuchen. Ich bin kein PHP-Entwickler, aber ich würde denken, dass Sie einen AJAX-Aufruf an die API anschließen und Ihre Webseite aktualisieren können.

2

Ich bin mir ziemlich sicher, dass Ihr Skript eine Zeitüberschreitung nach ~ 30 Sekunden nach dem Abhören von Daten im Stream hat. Selbst wenn dies nicht der Fall sein sollte, wird die Serverlast durch die schiere Anzahl von offenen und hörenden Verbindungen in die Knie gezwungen.

Ich würde vorschlagen, dass Sie sich eine AJAX-Lösung ansehen, die einen Aufruf an ein Skript aufruft, das nur eine Nachrichtenwarteschlange speichert. Ich bin nicht sicher, wie die Twitter API genau funktioniert, also bin ich mir nicht sicher, ob Sie ein Skript ausführen lassen können, wenn Sie alle Tweets erhalten möchten oder wenn Sie eine Art Daemon haben, der die Tweets an eine Warteschlange anfügt dass PHP über Ihren AJAX-Aufruf lesen und zurückgeben kann.

+0

Soweit ich weiß, ist es nur eine Verbindung. Twitter sendet mir ein XML (heißt es ein Objekt?) Pro Nachricht; Mein Server führt keine aktive Abfrage durch, nur Empfangen/Hören. –

+0

Ich würde vorschlagen, einen Daemon einzurichten, der nur hört (vielleicht in Python geschrieben, wäre es wahrscheinlich sehr einfach) und alle Tweets in eine MySQL-Datenbank ablegt. Ihre PHP-Skripte können dann aus der Datenbank lesen. –

2

Es gibt Bibliotheken für diese in diesen Tagen, die Dinge viel einfacher (und behandeln die kniffligen Bits wie reconnections, socket Handhabung, TCP-Backoff, usw.) machen, das heißt:

http://code.google.com/p/phirehose/

Verwandte Themen