【发布时间】:2011-11-25 14:25:33
【问题描述】:
我正在使用我一直在工作的 Web 应用程序实现 Klout API。
Klout 允许您每秒执行 10 个请求,每天执行 10,000 个请求。
每个用户帐户可以查看其他 N 个用户帐户的 Klout 分数。
收集此信息的最佳方法是定期从 Klout API 请求分数作为后台进程并将这些结果存储在数据库中吗?
如果我这样做,假设我们有 10 个用户想要查看其他 30 个用户的 Klout 分数。
在日常后台流程中,假设我们遍历 10 个用户中的每一个,并查看他们的 30 个关注用户的 Klout 分数。
这将在整个过程中最多对 Klout 的 API 执行 300 次 ping 操作(但是,您最多可以包含 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++;
}
}
【问题讨论】: