2016-09-09 18 views
0

私は最近レート制限されたAPIを使用します。リクエストは15秒ごとに実行される必要があります。そうでない場合は、429レート制限を超過したステータスコードが返されます。15秒ごとにAPIリクエストを実行

多くの場合、このAPIに対して実行する必要がある電子メールアドレスが複数あり、電子メールアドレスは配列内に含まれています。リクエストを15.5秒ごとに実行するにはどうすればいいですか?アレイの最後まで各メールアドレスに移動しますか?それは確かに非常にトリッキーなものです。私が試した:

setInterval(checkEmail(email), 15500); 

喜び、うまく動作するようには思えない何らかの理由で。 Btwは、そのcheckEmail(電子メール)関数内でJQuery $ .ajax()を使用していることを指摘しておきます。

ありがとうございます。

+0

15秒ごとに1回のリクエストに限定されている場合は、複数のユーザーがリクエストをしたときに何をするつもりですか?おそらく、APIを使用するために支払う(無料のプランであると仮定して、レート制限がある)か、代わりの –

+0

のcronとserversideの言語を使用するか、cronに少し問題がある場合は、 – madalinivascu

+0

残念なことに、いくつかの非常に不親切な人々(常に誰かが物事を傷つけなければならない)のために、APIは大きな打撃を受け始め、その人はそれにレート制限を設定する以外に選択肢がありませんでした。有料版はありません。あなたがそれを知っている必要があるなら、それはTroy Huntの「私はPwnedされましたか? – Dave

答えて

0

次の操作を行うことができます:

var emails = []; 
var interval_id; 

function _start() { 
    interval_id = window.setInterval(function() { 
     var email = emails.shift(); 
     if (email) { 
      var r=checkEmail(email.address); 
      if (email.callback) email.callback(r); 
     } 
     else { 
      window.clearInterval(interval_id); 
     } 
    }, 15500); 
} 

function add_email(email, callback) { 
    emails.push({address:email, callback:callback}); 
    if (!interval_id) _start(); 
} 

あなたがチェックするために、新しいメールアドレスを持っているときはいつでも、ちょうどadd_email(email)を実行します。これにより、それがキューに追加され、必要に応じてインターバルタイマーが開始されます。さらに、チェックが完了したときに通知を受け取る場合は、add_email(email,function(result) {....})と言うことができます。

+0

ありがとう、それは完璧に働いた! – Dave

関連する問題