我正在创建一个使用第三方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) { }
答案 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响应标头中的集合
中的项目总数