'Please set your OpenWeatherMap API key in weather.php']; } $apiUrl = "https://api.openweathermap.org/data/2.5/weather?q=" . urlencode($city) . "&units={$units}&appid={$apiKey}"; $response = @file_get_contents($apiUrl); if ($response === FALSE) { if (strpos($http_response_header[0], "404 Not Found") !== false) { return ['error' => 'City not found.']; } else { return ['error' => 'Failed to get weather data from OpenWeatherMap.']; } } else { $data = json_decode($response, true); if ($data && !isset($data['error'])) { // Fetch AQI data if (isset($data['coord']['lat']) && isset($data['coord']['lon'])) { $lat = $data['coord']['lat']; $lon = $data['coord']['lon']; // Fetch AQI data $aqiApiUrl = "http://api.openweathermap.org/data/2.5/air_pollution?lat={$lat}&lon={$lon}&appid={$apiKey}"; $aqiResponse = @file_get_contents($aqiApiUrl); if ($aqiResponse !== FALSE) { $aqiData = json_decode($aqiResponse, true); if ($aqiData && isset($aqiData['list'][0]['main']['aqi'])) { $data['aqi'] = $aqiData['list'][0]['main']['aqi']; } } // Fetch 5-day forecast $forecastApiUrl = "https://api.openweathermap.org/data/2.5/forecast?lat={$lat}&lon={$lon}&units={$units}&appid={$apiKey}"; $forecastResponse = @file_get_contents($forecastApiUrl); if ($forecastResponse !== FALSE) { $forecastData = json_decode($forecastResponse, true); if ($forecastData && isset($forecastData['list'])) { $dailyForecast = []; foreach ($forecastData['list'] as $forecast) { $day = date('Y-m-d', $forecast['dt']); // Use the forecast around noon for the daily summary if (strpos($forecast['dt_txt'], '12:00:00') !== false) { $dailyForecast[$day] = [ 'temp' => $forecast['main']['temp'], 'description' => $forecast['weather'][0]['description'], 'icon' => $forecast['weather'][0]['icon'] ]; } } $data['forecast'] = array_values($dailyForecast); } } } try { $pdo = db(); $stmt = $pdo->prepare("INSERT INTO weather_history (city_name, temperature, humidity, description, icon) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([ $data['name'], $data['main']['temp'], $data['main']['humidity'], $data['weather'][0]['description'], $data['weather'][0]['icon'] ]); } catch (PDOException $e) { // Log error, but don't block the user error_log("Could not save weather history: " . $e->getMessage()); } } return $data; } } if (isset($_GET['city'])) { $units = $_GET['units'] ?? 'metric'; echo json_encode(getWeatherByCity($_GET['city'], $units)); exit; } // The rest of the file remains the same for lat/lon requests $lat = $_GET['lat'] ?? null; $lon = $_GET['lon'] ?? null; if ($lat && $lon) { $units = $_GET['units'] ?? 'metric'; $apiKey = getenv('OPENWEATHERMAP_API_KEY') ?: '2350ecafed26b115b1557305d956630d'; $apiUrl = "https://api.openweathermap.org/data/2.5/weather?lat={$lat}&lon={$lon}&units={$units}&appid={$apiKey}"; $response = @file_get_contents($apiUrl); if ($response === FALSE) { echo json_encode(['error' => 'Failed to get weather data from OpenWeatherMap.']); } else { $data = json_decode($response, true); // Fetch AQI data $aqiApiUrl = "http://api.openweathermap.org/data/2.5/air_pollution?lat={$lat}&lon={$lon}&appid={$apiKey}"; $aqiResponse = @file_get_contents($aqiApiUrl); if ($aqiResponse !== FALSE) { $aqiData = json_decode($aqiResponse, true); if ($aqiData && isset($aqiData['list'][0]['main']['aqi'])) { $data['aqi'] = $aqiData['list'][0]['main']['aqi']; } } echo json_encode($data); } } else { echo json_encode(['error' => 'City or latitude and longitude are required.']); }