2009-07-31 10 views
7

(ほとんど)永続的な接続を開き、多くのユーザーに従うことができるTwitter APIには、一連のメソッド(birddog, shadow, and follow)があります。私は、bashのcURLを使ってサンプル接続コードを実行しました。うまく動作します。私が指定したユーザーがツイートを書き込むと、私のコンソールにXMLのストリームが得られます。PHPでストリーミングデータを扱うには?

私の質問は直接関数呼び出しとして返されないが、ストリーミングされるPHPでデータにアクセスするにはどうすればよいですか?このデータは散発的かつ予測不可能に到着しています。これまで対処してきたことではなく、回答の検索を開始する場所もわかりません。図書館や落とし穴に関するアドバイスや説明は高く評価されます。

答えて

6

fopenfgets

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

これは素晴らしい(あるいは良い)コードを意味しますが、それがないであるはあなたが必要とする機能を提供する必要があります。エラー処理とデータ解析を他にも​​追加する必要があります。

+1

注ストリームサポートは(fopenの追加されました)PHP 5.0であなたは、少なくともそれが必要になります。 – UnkwnTech

0

AJAXの使用を検討することをお勧めします。私はPHP開発者ではありませんが、AJAX呼び出しをAPIに接続してWebページを更新できると思います。

2

ストリーム上のデータを聞く〜30秒後にスクリプトがタイムアウトすることは間違いありません。そうでない場合でも、重要なサーバー負荷が発生すると、オープンおよびリスニング接続の数が膨大になり、サーバーが無意味になります。

メッセージキューを格納するスクリプトを呼び出すAJAXソリューションを見てみることをお勧めします。私はTwitter APIがどのように正確に動作するのかよくわからないので、すべてのつぶやきを取得するように要求されたときにスクリプトを実行できるかどうか、またはデーモンのある種の並べ替えをキューに追加する必要があるかどうかはわかりませんPHPはあなたのAJAX呼び出しを介して読みとり返すことができます。

+0

私が知っている限り、それはただ一つの接続です。 TwitterはメッセージごとにXML(オブジェクトと呼ばれていますか?)を送ります。私のサーバはアクティブなクエリを実行せず、受信/受信のみを行います。 –

+0

私はちょうど(Pythonで書かれた多分、おそらく非常に単純な)聞いて、MySQLデータベースにすべてのつぶやきをダンプするデーモンを設定することをお勧めします。 PHPスクリプトは、データベースから読み取ることができます。 –

2

物事がはるかに容易になります(と再接続、ソケット取り扱い、TCPバックオフなどのようなトリッキーなビットハンドル)、すなわち、このこれらの日のためのライブラリがあります。

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

関連する問題