2009-07-31 16 views
7

Istnieje rodzina metod (birddog, shadow, and follow) w interfejsie Twitter API, które otwiera (w większości) stałe połączenie i pozwala śledzić wielu użytkowników. Uruchomiłem przykładowy kod połączenia z cURL w bashu i działa ładnie: gdy określony przeze mnie użytkownik napisze tweet, dostaję strumień XML w mojej konsoli.Jak radzić sobie z przesyłaniem strumieniowym danych w PHP?

Moje pytanie brzmi: jak mogę uzyskać dostęp do danych za pomocą PHP, który nie jest zwracany jako bezpośrednie wywołanie funkcji, ale czy jest przesyłany strumieniowo? Dane te pojawiają się sporadycznie i nieprzewidywalnie, i nie jest to coś, z czym miałem do czynienia, ani nie wiem, od czego zacząć szukać odpowiedzi. Wszelkie porady i opisy bibliotek lub pułapek zostałyby docenione.

Odpowiedz

6

fopen i fgets

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

To nie oznacza wielką (lub nawet dobre) kod, ale powinien zapewniają funkcjonalność, czego potrzebujesz. Będziesz musiał między innymi dodać obsługę błędów i parsowanie danych.

+1

Uwaga Stream dodano wsparcie dla fopen() w PHP 5.0, więc trzeba będzie co najmniej równa. – UnkwnTech

0

Proponuję, aby zajrzeć do korzystania z AJAX. Nie jestem programistą PHP, ale myślę, że mógłbyś podłączyć wywołanie AJAX do API i zaktualizować swoją stronę.

2

Jestem prawie pewny, że twój skrypt wygaśnie po ~ 30 sekundach odsłuchiwania danych w strumieniu. Nawet jeśli nie, po uzyskaniu znacznego obciążenia serwera, liczba otwartych i nasłuchujących połączeń doprowadzi serwer do kolan.

Proponuję, abyś rzucił okiem na rozwiązanie AJAX, które wywołuje skrypt, który właśnie przechowuje kolejkę wiadomości. Nie jestem pewien, jak działa interfejs Twitter API, więc nie jestem pewien, czy możesz uruchomić skrypt, gdy zażądasz pobrania wszystkich tweetów, lub jeśli musisz mieć jakiegoś demona dołączającego tweety do kolejki że PHP może czytać i przekazywać za pośrednictwem połączenia AJAX.

+0

O ile mi wiadomo, to tylko jedno połączenie. Twitter wysyła mi XML (jest nazywany obiektem?) Za wiadomość; mój serwer nie wykonuje żadnych aktywnych zapytań, tylko odbiera/słucha. –

+0

Proponuję ustawienie demona, który po prostu nasłuchuje (może napisany w Pythonie, prawdopodobnie będzie bardzo prosty) i zrzuci wszystkie tweety do bazy danych MySQL. Twoje skrypty PHP mogą następnie odczytać z bazy danych. –

2

Istnieją biblioteki dla tego tych dni, które sprawiają, że rzeczy o wiele łatwiej (i obsługiwać skomplikowane bitów jak reconnections, obsługa Gniazdo, backoff TCP itp), tj:

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

Powiązane problemy