PHP Curl api post 请求仅返回 25 个结果,而可能还有更多
PHP Curl api post request gives back 25 results only, while there might be more
我想从网站上抓取一些有用的数据。但是请求只返回了25个结果
有了这个:
$url = 'https://api.test.org';
$ch = curl_init();
$jsonData = array(
'limit' => 100, //user inputs pages * 5
'listType' => 'taskSolutions',
'task' => $taskid //taken from input user substr($_POST['link'],28);
//'skip' => 25 $variable that increases by 25
);
curl_setopt($ch, CURLOPT_URL, $url);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); // loop adding 25 each time to skip
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch),true);
现在我查看了网站,他们有参数 'skip' 以获得更多结果。
但现在的问题是:
我如何制作一个循环,将 25 添加到 skip $variable 并重新发送 CURLOPT_POSTFIELDS 并将该数据添加到 $data
变量 $totalcount 可用于检查有多少记录。
您可以使用循环来完成此操作。例如,将上面的代码放在一个名为 getData 的函数中,并向它传递两个参数 $skip 和 $taskId :
function getData($skip, $taskid)
{
$url = 'https://api.test.org';
$ch = curl_init();
$jsonData = array(
'limit' => 100, //user inputs pages * 5
'listType' => 'taskSolutions',
'task' => $taskid //taken from input user substr($_POST['link'],28);
'skip' => $skip
);
curl_setopt($ch, CURLOPT_URL, $url);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); // loop adding 25 each time to skip
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return json_decode(curl_exec($ch),true);
}
然后您可以编写一个循环,将 $skip 变量递增 25,直到达到 $totalCount。在每次迭代中,将返回的元素添加到 $data 数组中:
$data = [];
for($skip = 0; $skip < $totalCount; $skip += 25)
{
foreach(getData($skip, $taskid) as $entry)
{
$data[] = $entry;
}
}
我想从网站上抓取一些有用的数据。但是请求只返回了25个结果
有了这个:
$url = 'https://api.test.org';
$ch = curl_init();
$jsonData = array(
'limit' => 100, //user inputs pages * 5
'listType' => 'taskSolutions',
'task' => $taskid //taken from input user substr($_POST['link'],28);
//'skip' => 25 $variable that increases by 25
);
curl_setopt($ch, CURLOPT_URL, $url);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); // loop adding 25 each time to skip
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch),true);
现在我查看了网站,他们有参数 'skip' 以获得更多结果。
但现在的问题是:
我如何制作一个循环,将 25 添加到 skip $variable 并重新发送 CURLOPT_POSTFIELDS 并将该数据添加到 $data
变量 $totalcount 可用于检查有多少记录。
您可以使用循环来完成此操作。例如,将上面的代码放在一个名为 getData 的函数中,并向它传递两个参数 $skip 和 $taskId :
function getData($skip, $taskid)
{
$url = 'https://api.test.org';
$ch = curl_init();
$jsonData = array(
'limit' => 100, //user inputs pages * 5
'listType' => 'taskSolutions',
'task' => $taskid //taken from input user substr($_POST['link'],28);
'skip' => $skip
);
curl_setopt($ch, CURLOPT_URL, $url);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); // loop adding 25 each time to skip
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return json_decode(curl_exec($ch),true);
}
然后您可以编写一个循环,将 $skip 变量递增 25,直到达到 $totalCount。在每次迭代中,将返回的元素添加到 $data 数组中:
$data = [];
for($skip = 0; $skip < $totalCount; $skip += 25)
{
foreach(getData($skip, $taskid) as $entry)
{
$data[] = $entry;
}
}