使用php cURL的api调用未返回所有页面

时间:2019-01-09 22:51:16

标签: php api curl

我正在尝试点击一个api,并使用返回的数据填充数据库表。我需要获取9000多行数据,每页只有100行数据。我正在设置循环,以控制我所在的页面,但仅返回前100条记录(第一页)。

我的代码目前仅抓取两页进行测试。

我正在使用PHP cURL完成此操作

for($pageLoop = 0; $pageLoop < 2; $pageLoop++){
  $curl2 = curl_init();
  curl_setopt_array($curl2, array(
    CURLOPT_URL => "https://SOME_SERVER/rest/search/?api_key=MY_API_KEY&searchTerm=&pageNumber=".$pageLoop."&pageSize=100",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
      "cache-control: no-cache"
    ),
  ));

  $response2 = curl_exec($curl2);
  $err2= curl_error($curl2);

  if(!curl_exec($curl2)){
    die('Error: "' . curl_error($curl2) . '" - Code: ' . curl_errno($curl2));
  }
  curl_close($curl2);

  for($itemLoop = 0; $itemLoop <  100; $itemLoop++){
    echo 'chpl product number yy: ' . $response['results'][$itemLoop]['chplProductNumber'] . '<br>';
  }//END ITEM LOOP        
}//END PAGE LOOP

预期结果是每一页的项目列表。截至今天共有97页,而我只有第一页。 谢谢

1 个答案:

答案 0 :(得分:1)

我的猜测是,您正在调用第0页,该页不返回任何结果。因此,在第二次迭代中,您是第一次调用第1页。

因此,仅获得首页结果。

尝试一下:

$pageLoop = 1;
do {
  $cl = curl_init();
  curl_setopt_array($cl, array(
    CURLOPT_URL => "https://SOME_SERVER/rest/search/?api_key=MY_API_KEY&searchTerm=&pageNumber=".$pageLoop."&pageSize=100",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
      "cache-control: no-cache"
    ),
  ));

  $response = curl_exec($cl);
  curl_close($cl);

  for($itemLoop = 0; $itemLoop <  100; $itemLoop++)
    echo 'chpl product number yy: ' . $response['results'][$itemLoop]['chplProductNumber'] . '<br>';

  $pageLoop++;
} while ($pageLoop <= 2);

此外,我注意到一些完全未使用的变量名。例如$err2$response2。我的最新编辑对此做了一些整理。