我正在开发一个 Web 应用程序,它会迭代 API 结果以插入 MySQL 数据库。
我使用的 API 将每次调用返回的记录限制为最多 500 条。
它们有一个参数,您可以在其中选择从哪个“页面”返回结果,因此对于 1504 条(当前记录数)记录,我可以调用第 2 页并返回 500-999 条结果。
我充其量只是半新手,这是我第一次尝试使用 API...我正在努力思考如何收集所有 1504 个结果。
这方面的 API 文档是:https://developer.trademe.co.nz/api-reference/search-methods/rental-search/
我可以使用“page”参数来选择我想要的结果页。
$url = "https://api.tmsandbox.co.nz/v1/Search/Property/Rental.json";
$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Authorization: OAuth oauth_consumer_key="xxx", oauth_signature_method="PLAINTEXT", oauth_signature="xxx"';
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER,$headr);
$pageSize = 10;
$data = array(
"rows" => $pageSize,
"sort_order" => "ExpiryDesc",
"page" => 1
);
$totalPages = PHP_INT_MAX;
$result = [];
do {
curl_setopt($curl, CURLOPT_URL, $url."?".http_build_query ($data));
$resulta = curl_exec($curl);
$array = json_decode($resulta, true);
array_merge($result, $array);
$data['page']++;
if ( $totalPages == PHP_INT_MAX ) {
$totalPages = floor($array['TotalCount']/$pageSize);
}
}
while ( $totalPages < $data['page']);
$properties = $array['List'];
$prop_count = $array['TotalCount'];
curl_close($curl);
这是我用来返回 500 个结果的代码。 $prop_count 保存总行数 (1504),$pages 保存页数(在本例中为 3.08)。
任何人都可以让我先了解实现某种循环以返回所有结果的逻辑顺序吗?我坐在这里绞尽脑汁地想开始。
最佳答案
虽然无法测试这一点,但这里的原则是不断发出请求,直到没有更多页面为止。第一次循环时,它将计算出页数(使用返回内容中的 TotalCount/pageSize - 使用 floor()
使 3.1 变为 3)。然后在循环结束时检查当前页是否 > 总页数。
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER,$headr);
$pageSize = 500;
$data = array(
"rows" => $pageSize,
"sort_order" => "ExpiryDesc",
"page" => 1
);
$totalPages = PHP_INT_MAX;
$result = [];
do {
curl_setopt($curl, CURLOPT_URL, $url."?".http_build_query ($data));
$resulta = curl_exec($curl);
$array = json_decode($resulta, true);
$result[] = $array['List'];
$data['page']++;
if ( $totalPages == PHP_INT_MAX ) {
$totalPages = floor($array['TotalCount']/$pageSize);
}
}
while ( $totalPages > $data['page']);
curl_close($curl);
// Loop through the pages of results and in each page each listing
foreach ( $result as $page ) {
foreach ( $page as $item ){
// Process each item
echo $item['ListingId'].PHP_EOL;
}
}
关于php - API 调用限制为 500 个结果 - 如何迭代以获取所有结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448941/