¡Genial! Comencemos a construir nuestra aplicación meteorológica. Aquí te presento una estructura básica con las clases principales y sus responsabilidades:
import com.google.gson.Gson; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.Scanner;
public class AppClima {
private static final String API_KEY = "TU_API_KEY_DE_OPENWEATHERMAP";
private static final String API_URL = "https://api.openweathermap.org/data/2.5/weather";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Gson gson = new Gson();
while (true) {
System.out.print("Ingrese el nombre de la ciudad (o 'salir' para terminar): ");
String ciudad = scanner.nextLine();
if (ciudad.equalsIgnoreCase("salir")) {
break;
}
try {
String json = obtenerDatosClima(ciudad);
RespuestaOpenWeather respuesta = gson.fromJson(json, RespuestaOpenWeather.class);
DatosClima datos = new DatosClima(respuesta);
System.out.println(datos);
// Opcional: Guardar historial de consultas
} catch (IOException | InterruptedException e) {
System.err.println("Error al obtener los datos del clima: " + e.getMessage());
}
}
scanner.close();
}
private static String obtenerDatosClima(String ciudad) throws IOException, InterruptedException {
String url = API_URL + "?q=" + ciudad + "&appid=" + API_KEY + "&units=metric&lang=es";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
// Record para almacenar los datos relevantes del clima record DatosClima(double temperatura, double humedad, String descripcion) { public DatosClima(RespuestaOpenWeather respuesta) { this(respuesta.main.temp, respuesta.main.humidity, respuesta.weather[0].description); } }
// Clases para representar la estructura de la respuesta JSON de OpenWeatherMap class RespuestaOpenWeather { Main main; Weather[] weather; }
class Main { double temp; double humidity; }
class Weather { String description; }
Recuerda:
Reemplaza TU_API_KEY_DE_OPENWEATHERMAP con tu clave de API de OpenWeatherMap. Puedes personalizar la presentación de los datos en el método toString del record DatosClima. Implementa la lógica para guardar el historial de consultas si deseas esa funcionalidad.