我正在使用我一直在工作的web应用程序实现Klout API。
Klout允许你每秒处理10个请求,每天处理10000个请求。每个用户帐户可以查看N个其他用户帐户及其Klout评分。
收集这些信息的最好方法是定期从Klout API请求分数作为后台进程,并将这些结果存储在数据库中吗?如果我这样做,假设我们有10个用户,他们有30个其他用户的Klout分数想要查看。
在日常后台进程中,假设我们遍历了10个用户,并查找了他们30个关注用户的Klout分数。
这将在整个过程中ping Klout的API最多300次(但是您可以包含多达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++;
}
}
这应该足以避免得到错误,但做大量的数据库追加和存储数据超过5天仍然会违反服务条款。
我只保留每个请求的计数器。提出10个请求。睡1000分钟。重置计数器。提出10个请求。