2011-09-26 53 views
0

我正在實施Klout API與我一直在工作的Web應用程序。隨着時間的推移擴大有限的API請求大批請求

Klout允許你做10次/秒和10,000次/天。

每個用戶帳戶都可以查看N個其他用戶帳戶及其Klout分數。

收集此信息的最佳方法是定期從Klout API請求分數作爲後臺進程並將這些結果存儲在數據庫中?

如果我這樣做,假設我們有10個用戶有30個其他用戶的Klout評分他們想要查看。

在日常的後臺過程中,我們還要說我們會瀏覽10個用戶中的每個用戶,並查看他們30個用戶的Klout分數。

這將在整個過程中最多300次ping Klout的API(但是,您可以包含多達5個用戶來查看每個請求的分數 - 因此請求數量可減少到60)。

爲了避免每秒10個請求的上限,我應該在每個請求之間睡眠大約10秒的過程嗎?這是避免任何API錯誤的最佳方法嗎?


的僞例:

$maxUserPerRequest = 5; 
foreach ($users as $user){ 
    $follows = getKloutFollows($user); // list of klout scores to look up per user 
    $minimize = 0; // allow to minimize total requests by 5 users per req. 
    $batch = array() // array of 5 users to request 
    foreach($follows as $follow){ 
     $batch[] = $follow; 
     // query 5 users at a time 
     if ($maxUserPerRequest % $minimize==0){ 
      $kloutAPI->getScore($batch); // storing results 
      $batch = array(); 
      sleep(10); // avoid overloading API requests 
     } 
     $minimize++; 
    } 
} 

回答

1

這應該足以避免收到錯誤,但這樣做大規模數據庫和附加存儲的數據超過5天仍然違反Terms of Service

我只是保留每個請求的計數器。提出10個請求。睡眠1000.重置計數器。提出10個請求。睡1000.

+1

其實7天不是嗎? ''您只能在服務器,緩存或數據庫上保留7天的Klout數據副本。「' – mellamokb

+0

因此,如果我在7天內運行此過程,我會好嗎? – Atticus

+0

@mellamokb你是對的。我傾向於根據工作日來思考。 – harmophone