20 sonuç veriyor place api maksimum 60 sonuç veriyor 60 sonucu elde etmek için page_token kullanabilirsiniz.
function get_places($query, $country, $language, $limit, $page) {
global $config;
$results = [];
$total_results = 0;
$page_token = null; // İlk sayfa için başlangıçta page_token yok
// Limit, her istekten 20 sonuç döneceğini varsayarak API çağrı sayısını belirler
$api_calls = ceil($limit / 20);
for ($i = 0; $i < $api_calls; $i++) {
$curl = curl_init();
$post_fields = [
'q' => $query,
'gl' => $country,
'hl' => $language,
'num' => 20,
'page' => $page + $i,
];
// Eğer bir page_token varsa, isteğe dahil et
if ($page_token) {
$post_fields['page_token'] = $page_token;
}
curl_setopt_array($curl, [
CURLOPT_URL => 'https://google.serper.dev/places',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($post_fields),
CURLOPT_HTTPHEADER => [
"X-API-KEY: {$config['api_key']}",
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new Exception("cURL Error #:" . $err);
}
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception("JSON decode error: " . json_last_error_msg());
}
$results = array_merge($results, $result['places'] ?? []);
$total_results = $result['searchMetadata']['totalResults'] ?? 0;
// page_token bir sonraki sayfa için güncelleniyor
$page_token = $result['nextPageToken'] ?? null;
// Sonuç sayısı limiti aştığında döngüyü sonlandır
if (count($results) >= $limit || !$page_token) {
break;
}
}
return [
'places' => array_slice($results, 0, $limit),
'total_results' => intval($total_results)
];
}fonksiyonu bu şekilde değiştirip sonraki sayfa geçişlerde diğer sonuçları da alabilirsiniz.