【问题标题】:Looping through an API with offsets通过带有偏移量的 API 循环
【发布时间】:2015-03-05 09:31:24
【问题描述】:

我使用的 API 仅限于在单个请求中返回 100 个项目 - 他们已经实现了偏移量,这应该允许循环通过多个请求,但我不知道如何将两者结合起来。

目前我正在使用它返回 100 个项目并为我提供我需要的所有数据等,但总共有大约 2,000 个项目,我需要将它们全部循环:

try {
    $all = RestClient::all(array("limit" => 100));
    foreach($all as $entry){
        //do something
}

catch(Exception $e) {
    print $e;
}

文档显示了如何使用偏移量的示例:

$resList = RestClient::all(array('limit'=>100));    
echo $resList->nextOffset();    
if($resList->nextOffset()) {     
   $resList = RestClient::all(array("limit" => 100, "offset" => $resList->nextOffset()));    
   echo $resList->nextOffset();
}

该示例没有显示任何循环,那么我的循环在哪里?我需要多个循环吗?

如果我在第一个 $resList 之后添加一个循环,那么它将循环遍历这 100 个,但不会再循环了,尽管我假设如果我在 if 中添加它,那么它将永远不会满足,因为永远不会定义偏移量?

如何使用偏移量循环遍历所有项目 - 实际上,将两组代码结合起来?

【问题讨论】:

  • 你可以试试do- while 请检查php.net 你会看到那里的例子,在他们的文档例子中,第一个reqeust 应该在doif 子句应该在@987654326 @条件

标签: php loops offset


【解决方案1】:
$offset = 0;
while (true) {
    $resList = RestClient::all(array('limit'=>100, , "offset" => $offset));

    foreach($resList as $entry) {
        // do something
    }
    if (!$resList->nextOffset()) {
        brake;
    }
    $offset = $resList->nextOffset();
}

【讨论】:

  • 谢谢,我试过了,它几乎可以工作 - 如果有 205 条记录,它只返回 200,同样,如果有 567 条记录,它只返回 500 等等。我可以使用 1 的限制并进行 100 倍的 API 调用,但它并没有让我觉得效率非常高!还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2011-06-20
  • 2019-02-18
  • 2015-07-23
相关资源
最近更新 更多