我在尝试理解为什么我的代码不起作用时遇到了一些困难。它应该像这样工作:
/postman-test-route
路线https://pro-sitemaps.com/api/
进行API调用entries == 20
,则进行另一个API调用,但将'from'
参数从0
更改为20
,然后依次是30
和40
,然后是50
,直到条目少于20
。但是看起来代码只运行一次。代码如下:
$app->map(['GET', 'POST'],'/postman-test-route', function (Request $request, Response $response) {
function getPROsitemapsEntries($total_from)
{
$client = new Client([
'sink' => 'C:\Users\****\Desktop\temp.txt'
]);
$r = $client->request('POST', 'https://pro-sitemaps.com/api/', [
'form_params' => [
'api_key' => 'ps_UmTvDUda.***************',
'method' => 'site_history',
'site_id' => 3845****,
'from' => $total_from, // Fra enties ID, kan kjøre en foreach for hver 20 entries. Hold en counter på result, hvis mindre enn 20 så fortsett, ellers die.
]
]);
return $r;
}
$function_call = getPROsitemapsEntries(0);
$responseData = json_decode($function_call->getBody(), true);
$i = 0;
$items = array(); // ALL entries should be saved here.
foreach($responseData['result']['entries'] as $entries){
$items[] = $entries;
$i++;
}
// Here it should call the API again with 'from' = 20, then 30, then 40
if($i > 20){
getPROsitemapsEntries($i);
}else{
die;
}
因此,我可以看到以下代码:
if($i > 20){
getPROsitemapsEntries($i);
}else{
die;
}
我想这会再次调用API,并且应该在foreach新条目中保存(而不是覆盖)。有人可以看到我在哪里做错了吗?我很新
谢谢!
答案 0 :(得分:2)
因此,您实际上是在再次调用API,只是没有遍历结果。
$shouldProcess = true;
$searchIndex = 0;
$items = [];
while ($shouldProcess) {
$processedThisLoop = 0;
$function_call = getPROsitemapsEntries($searchIndex);
$responseData = json_decode($function_call->getBody(), true);
foreach($responseData['result']['entries'] as $entries) {
$items[] = $entries;
$searchIndex++;
$processedThisLoop++;
}
if($processedThisLoop == 0) {
// Didn't find any so stop the loop
$shouldProcess = false;
}
}
var_dump($items);
在上面的代码中,我们跟踪在$searchIndex
中处理的条目总数。这将使我们能够继续获得新的物品,而不是旧的物品。
$shouldProcess
是bool
,它将指示我们是否应该继续尝试从API获取新条目。
$items
是一个数组,其中包含API中的所有条目。
$processedThisLoop
包含我们在此循环中处理的条目数量,即对API的请求是否有任何条目要处理?如果不是,则将$shouldProcess
设置为false,这将停止while
循环。