我正在使用我一直在工作的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++;
}
}
答案 0 :(得分:1)
这应该足以避免错误,但是大量数据库追加并存储数据超过5天仍然会违反Terms of Service。
我会保留每个请求的计数器。提出10个请求。睡眠1000次。重置计数器。提出10个请求。睡了1000。