/
ValeriaEr
/
Laba
Обзор
Документация
Войти
/
ValeriaEr
/
Laba
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
search.php
106 строк
3 KB
ValeriaEr
first commit
22 ноя 2025, 14:24
22 ноя 2025, 14:24
4391421
Код
Авторство
О чём код?
<?php // Логирование ошибок, но без вывода на экран error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1); ini_set('error_log', __DIR__ . '/error.log'); header('Content-Type: application/json; charset=utf-8'); // Получаем данные из POST $data = json_decode(file_get_contents("php://input"), true); $lat = $data["lat"] ?? 47.2362; $lon = $data["lon"] ?? 38.8969; $category = $data["category"] ?? "cafe"; // Преобразуем категории в теги OSM $map = [ "cafe" => '["amenity"="restaurant"]', "culture" => '["tourism"="gallery"]', "active" => '["leisure"="sports_centre"]', "entertainment" => '["amenity"="cinema"]', "nature" => '["leisure"="park"]', "history" => '["historic"="monument"]' ]; $tag = $map[$category] ?? '["amenity"="restaurant"]'; $radius = 3000; // Формируем запрос к Overpass API $query = <<<EOT [out:json]; node(around:$radius,$lat,$lon)$tag; out center; EOT; $url = "https://overpass-api.de/api/interpreter?data=" . urlencode($query); // --- cURL вместо file_get_contents --- $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $json = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if (!$json || $http_code != 200) { echo json_encode(["error"=>"Overpass API error"]); exit; } // --- Обработка данных --- $osn = json_decode($json, true); $places = []; foreach ($osn["elements"] as $el) { if (!isset($el["tags"]["name"]) || trim($el["tags"]["name"]) === "") continue; if (!isset($el["lat"]) || !isset($el["lon"])) continue; $street = $el["tags"]["addr:street"] ?? ""; $housenumber = $el["tags"]["addr:housenumber"] ?? ""; $city = $el["tags"]["addr:city"] ?? "Таганрог"; $addressParts = []; if ($street !== "") $addressParts[] = $street; if ($housenumber !== "") $addressParts[] = $housenumber; $address = !empty($addressParts) ? implode(", ", $addressParts) : $city; $places[] = [ "name" => $el["tags"]["name"], "address" => $address, "category" => $category, "rating" => null, "avg_check" => null, "url" => isset($el["tags"]["website"]) && trim($el["tags"]["website"]) !== "" ? $el["tags"]["website"] : null, "lat" => $el["lat"], "lon" => $el["lon"] ]; } // --- СОХРАНЕНИЕ В БАЗУ --- $mysqli = @new mysqli("localhost", "u3336161_default", "C5VzG93JtFd0fMrX", "u3336161_default"); if (!$mysqli->connect_error) { foreach ($places as $p) { $stmt = $mysqli->prepare( "INSERT IGNORE INTO places (name,address,lat,lon,category,url,fetched_at) VALUES (?,?,?,?,?,?,NOW())" ); if ($stmt) { $stmt->bind_param("ssddss", $p['name'], $p['address'], $p['lat'], $p['lon'], $p['category'], $p['url'] ); $stmt->execute(); $stmt->close(); } } $mysqli->close(); } // --- ВОЗВРАЩАЕМ JSON --- echo json_encode(["places" => $places]); exit;