随着时间的推移为大量请求扩展有限的API请求

时间:2011-09-26 22:27:09

标签: php api timeout

我正在使用我一直在工作的Web应用程序实现Klout API。

Klout允许您执行10个请求/秒,以及10,000 /天。

每个用户帐户都可以使用其Klout分数查看N个其他用户帐户。

收集此信息的最佳方法是定期从Klout API请求分数作为后台进程并将这些结果存储在数据库中吗?

如果我这样做,假设我们有10个用户,他们想要查看其他30个用户的Klout分数。

在日常的后台流程中,我们还要说明我们会检查10个用户中的每个用户,并查看他们的30个用户Klout分数。

这将在整个过程中最多对Klout的API进行300次ping操作(但是,您可以包含最多5个用户来查找每个请求的分数 - 因此请求数量可以减少到60个。)

为了避免每秒10个请求上限,我应该在每个请求之间睡眠过程大约10秒吗?这是避免任何API错误的最佳方法吗?


Psuedo示例:

$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 个答案:

答案 0 :(得分:1)

这应该足以避免错误,但是大量数据库追加并存储数据超过5天仍然会违反Terms of Service

我会保留每个请求的计数器。提出10个请求。睡眠1000次。重置计数器。提出10个请求。睡了1000。