0

TwitterストリーミングAPIからコマンドラインにcURLを使用してツイートを出力するphpcliスクリプトを作成しました。スクリプトを開始するとツイートの出力が開始されますが、50ツイートごとに、「簡単です、ターボ。最近リクエストが多すぎます。落ち着いてください。」、ヘッダーなし、その他の出力なし、文字列のみというエラーが表示されます。

接続が多すぎると思いますが、cURLを初期化するのは1回だけです。これが私のコードです:

//initialize cURL connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://stream.twitter.com/1.1/statuses/filter.json?  follow=34572451,27260086');
curl_setopt($ch, CURLOPT_USERPWD, 'USERNAME:PASSWORD');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'saveTweet');
curl_setopt($ch, CURLOPT_MAXCONNECTS, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cache-Control: max-age=0', 'Connection: keep-alive', 'Keep-Alive: 3600'));

//then loop the execution to retrieve tweets
while(1){
    echo $i++.'->'; //echo number, so we know it stops at 50

    try {
        //calls saveTweet() as callback, which only purpose is to output the tweet
        curl_exec($ch); 
    }
    catch(Exception $e) {
        //echo error described above
        echo $e->getMessage(); 
        break;
    }
}

cURLがあまりにも多くのリクエストを行うのを防ぐにはどうすればよいですか(そうする場合、正確な問題はわかりません)。または、上記のエラーが発生しないようにするにはどうすればよいですか?

4

2 に答える 2

1

たまに寝たり寝たりする必要があるようなエンドレスループを実行できます

sleep(1);

また、カウントオプションも確認したいと思いますcount

取得するレコードの数を指定します。200以下である必要があります。デフォルトは20です。

このようにして、1回のリクエストでより多くのレコードをプルできます...

于 2012-10-18T12:48:27.183 に答える
0

どうやらあなたはあまりにも多くの接続を開いています:

curl_setopt($ch, CURLOPT_FORBID_REUSE, true);

再利用のために接続をプールしてテストできますか?

TPS:トランザクション/ 2番目のDOS:サービス拒否; リソースを使い果たして

于 2012-10-18T13:00:28.590 に答える