分页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"