分页api请求,如何知道是否有其他页面?

时间:2015-08-10 13:26:00

标签: php api pagination

我正在创建一个使用第三方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) { }

4 个答案:

答案 0 :(得分:2)

在输入中,在while循环中,您更改$ url(实际上通过API调用保存数据返回),如果我正确,则会检查是否空白。

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

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

如果是这种情况,我的建议是检查" []"在循环中(例如while($ url!==" []"))或循环内解码响应数据($ url = json_decode($ url))。

答案 1 :(得分:1)

根据我对多个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
}

希望得到这个帮助。

答案 2 :(得分:0)

根据您显示的回复,如果没有结果,则会得到一个空数组。在这种情况下,您可以在循环中使用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;
}

这样它就会在所有页面上循环,直到没有更多的数据。

答案 3 :(得分:0)

检查http响应标头中的集合

中的项目总数