0

私は基本的にいくつかのつぶやきのフィルタリングを行う、小さくてシンプルなコードに取り組んでいます。問題は、Twitter API のリクエスト制限に達していることです。回避策があるかどうか、またはやりたいことを実行できないかどうかを知りたいです。

まず、Twitter のユーザー名を入力して、このユーザーがフォローしているユーザーの ID を取得します。

$user_id = $_GET["username"]; 
$url_post = "http://api.twitter.com/1/friends/ids.json?cursor=-1&screen_name=" . urlencode($user_id);
$following = file_get_contents($url_post, true);
$json = json_decode($following);

$ids = $json->ids;

Twitter API は ID のリストで応答します。

ここで問題が発生します。次のステップは、これらの ID ごとにユーザー名、プロフィール写真、および説明を見つけるためのリクエストを作成することです。

$following = array();
foreach ($ids as $value)
{
$build_url = 'http://api.twitter.com/1/users/lookup.json?user_id=' . $value . '';
$following[] = $build_url;
}


foreach ($following as $url) 
{
$data_names = file_get_contents($url, true); //getting the file content
$json_names = json_decode($data_names);

foreach ($json_names as $tweet) {

$name = $tweet->name;
$description = $tweet->description;

echo '<p>'; 
echo $name . '<br>';
echo $description;
echo '</p>';
}
}

ユーザーが 50 人をフォローしている場合は機能します。しかし、彼がフォローした場合、たとえば 600 百、それは制限を超える Twitter API への 600 百リクエスト (ユーザー名、説明、およびプロファイルの写真) になります。

これを回避する方法はありますか?それはできませんか?

ありがとうございました!

4

1 に答える 1

0

users/lookupTwitter ID ごとに 1 つのリクエストを行うのではなく、一度に 100 個の userId を使用して API エンドポイントをリクエストできます。参照。https://dev.twitter.com/docs/api/1.1/get/users/lookup

forEach ループ ( foreach ($following as $url)) を再帰関数に置き換える必要があります。

関数の最後で、再度呼び出す前に残りのヒット数を確認します (レート制限を受けるまでのリマイニング時間を知る方法については、このリンクを参照してください)。

ヒットが残っていない場合は、関数を再度呼び出す前に 15 分間スリープし、それ以外の場合は再度呼び出しを行います。

これを行う方法、Google を使用して既存の stackOverflow の質問を検索する方法に関する情報はたくさんあります。

于 2014-01-28T23:56:48.883 に答える