分页API请求,如何知道是否有另一个页面?

我正在创建一个使用第三方API的PHP类。 该API有一个包含这个请求URL结构的方法:

https://api.domain.com/path/sales?page=x

其中“x”是页码。

每个页面返回50个销售额,我需要为每个用户返回未定义数量的页面(取决于用户的销售额),并存储每笔销售的一些数据。

我已经创建了一些从URL获取数据的方法,解码并创建一个包含所需数据的新数组,但仅限第一个页面请求。

现在我想创建一个方法来检查是否有另一个页面,如果有,请取出并再次进行检查

我如何检查是否有另一个页面? 以及如何创建一个可以获得另一个页面的循环(如果有的话)?

我已经有了这个代码,但它创建了一个无限循环。

require('classes/class.example_api.php');
$my_class = new Example_API;
$page = 1;
$sales_url = $my_class->sales_url( $page );
$url = $my_class->get_data($sales_url);

while ( !empty($url) ) {
    $page++;
    $sales_url = $my_class->sales_url( $page );
    $url = $my_class->get_data($sales_url);
}

我不使用CURL,我使用file_get_content 。 当我请求页面超出范围时,我会得到以下结果:

string(2) "[]"

而这个json_decode之后:

array(0) { }

从你的输入中,在while循环中,你改变$ url(实际上通过API调用保存数据返回),并且如果我是正确的,则检查它是否为空。

$url = $my_class->get_data($sales_url);

如果以上只是原始响应(如果页面超出范围,字符串“[]”),它将永远不会变为空(“[]”)为真。 所以我的猜测是get_data的返回值是这个字符串,而它应该是实际的数组/ json,即使结果是空的(即我怀疑你在收集数据后执行json_decode,例如在循环之外)。

如果是这样的话,我的建议是在循环中检查“[]”(例如while($ url!==“[]”))或循环内解码响应数据($ url = json_decode( $ URL))。


根据我对几个API的经验,响应返回找到的行数,以及从页面1开始的每页x个数。在您的情况中,如果响应具有行数,那么只需将它除以x数字页并循环遍历结果为页码。

$results =1000;
$perPage = 50;
$pages = ceil($results/$perPage);
for (i=1 ; $i < $pages; $pages++){
     // execute your api call and store the results
}

希望这个帮助。


从你显示的回复中,如果没有结果,你会得到一个空数组。 在这种情况下,您可以在循环中使用empty方法来确定是否有任何要报告的内容:

// Craft the initial request URL
$page = 1;
$url = 'https://api.domain.com/path/sales?page=' . $page;

// Now start looping
while (!empty(file_get_contents($url)) {
    // There's data here, do something with it

    // And set the new URL for the next page
    $url = 'https://api.domain.com/path/sales?page=' . ++$page;
}

这样它将继续循环遍历所有页面,直到没有更多数据。

链接地址: http://www.djcxy.com/p/27999.html

上一篇: paginated api request, how to know if there is another page?

下一篇: pip install numpy doesn't work: "No matching distribution found"