Merhabalar.
Yazılım Serper.dev api üzerinden Google Maps / Place üzerinde arama yapmaktadır. Yaptığı aramaları kullanıcı adına tanımlı olan veritabanında kaydetmektedir, daha sonrasında geri dönüp yaptığı aramaları inceleyebilirsiniz. Çıkan sonuçlarda telefon numarası olan işletmelerin yanında Whatsapp üzerinden mesaj gönderebilirsiniz, Sadece telefon numarası olan işletmelerde bu buton aktif oluyor. Profile.PHP Sayfasında kullanıcıyla ilgili kullanıcı adı düzenleme, eposta düzenleme, şifre düzenleme gibi işlemler yapabilirsiniz. İndex.php dosyasında veri arama işlemi ve çıkan sonuçları inceleyebilirsiniz. Serper.dev api kaynaklı tek aramada en fazla 10 sonuç elde ediyorsunuz, bu durum api kaynaklıdır, api tarafında engelleme var, eğer ilerleyen süreçlerde Place api kaynağı elde edebilirsem yazılımı Place api üzerinde tekrar düzenleyebilirim. Config.PHP Dosyasını kendi veritabanı yapınıza göre düzenleyiniz, dosyalar içerisinde SQL database tablosu mevcuttur. Açık kaynaklıdır, dilediğiniz gibi düzenleyebilirsiniz.
Görüşürüz
https://github.com/propjoe-tr/Harita...HP-Serper.dev/
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.