2009-07-31 18 views
7

C'è una famiglia di metodi (birddog, shadow, and follow) nell'API di Twitter che apre una connessione (prevalentemente) permanente e consente di seguire molti utenti. Ho eseguito il codice di connessione di esempio con cURL in bash, e funziona bene: quando un utente che specifichi scrive un tweet, ottengo un flusso di XML nella mia console.Come gestire i dati di streaming in PHP?

La mia domanda è: come posso accedere ai dati con PHP che non viene restituito come una chiamata di funzione diretta, ma è in streaming? Questi dati arrivano sporadicamente e imprevedibilmente, e non è qualcosa che abbia mai affrontato né so da dove cominciare a cercare risposte. Sarebbe gradito qualsiasi consiglio e descrizione di biblioteche o insidie.

risposta

6

fopen e fgets

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

Questo non è affatto grande (o anche buona) Codice ma dovrebbe forniscono le funzionalità necessarie. Sarà necessario aggiungere la gestione degli errori e l'analisi dei dati tra le altre cose.

+1

Nota è stato aggiunto al fopen() in PHP 5.0 quindi sarà necessario almeno questo. – UnkwnTech

0

Vorrei suggerire di utilizzare AJAX. Non sono uno sviluppatore PHP, ma penso che potresti collegare una chiamata AJAX all'API e aggiornare la tua pagina web.

2

Sono quasi sicuro che lo script scadrà dopo circa 30 secondi di ascolto dei dati sullo streaming. Anche se così non fosse, una volta ottenuto un carico significativo sul server, il semplice numero di connessioni aperte e in ascolto porterà il server alle sue ginocchia.

Suggerirei di dare un'occhiata a una soluzione AJAX che effettua una chiamata a uno script che memorizza solo una coda di messaggi. Non sono sicuro di come funzioni esattamente l'API di Twitter, quindi non sono sicuro che tu possa eseguire uno script quando richiesto per ottenere tutti i tweet, o se devi avere una sorta di demone per aggiungere i tweet a una coda che PHP può leggere e passare tramite la chiamata AJAX.

+0

Per quanto ne so, è solo una connessione. Twitter mi invia un XML (si chiama un oggetto?) Per messaggio; il mio server non sta facendo alcuna interrogazione attiva, solo ricevendo/ascoltando. –

+0

Suggerirei di configurare un Demone che solo ascolti (forse scritto in Python, sarebbe probabilmente molto semplice) e scarica tutti i tweet in un database MySQL. I tuoi script PHP possono quindi leggere dal database. –

2

Non ci sono librerie per questo in questi giorni che fanno cose molto più facile (e gestiscono i bit difficili come reconnections, movimentazione presa, TCP backoff, ecc), vale a dire:

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

Problemi correlati