Die Funktionalität des WetterService wurde erfüllt
parent
e9478289c5
commit
09a7b543a5
|
@ -1,6 +1,78 @@
|
||||||
package domain;
|
package domain;
|
||||||
|
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.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public class WetterService {
|
public class WetterService {
|
||||||
|
|
||||||
|
private static final String API_KEY = "fc01dfd47f80659f12512c295e80b201";
|
||||||
|
private static final HttpClient client = HttpClient.newHttpClient();
|
||||||
|
|
||||||
|
public static String getAktuellesWetter(String location) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
String url = "http://api.openweathermap.org/data/2.5/weather?q=" + location + "&appid=" + API_KEY
|
||||||
|
+ "&units=metric";
|
||||||
|
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
|
||||||
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
if (response.statusCode() != 200) {
|
||||||
|
throw new IOException("Unerwarteter Code " + response.statusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject(response.body());
|
||||||
|
double temp = json.getJSONObject("main").getDouble("temp");
|
||||||
|
String weather = json.getJSONArray("weather").getJSONObject(0).getString("description");
|
||||||
|
|
||||||
|
return "Aktuelle Temperatur: " + temp + "°C, Wetter: " + weather;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getWettervorhersage(String location) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
String url = "http://api.openweathermap.org/data/2.5/forecast?q=" + location + "&appid=" + API_KEY
|
||||||
|
+ "&units=metric";
|
||||||
|
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
|
||||||
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
if (response.statusCode() != 200) {
|
||||||
|
throw new IOException("Unerwarteter Code " + response.statusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject(response.body());
|
||||||
|
Map<String, Double> tempByDay = new HashMap<>();
|
||||||
|
Map<String, String> weatherByDay = new HashMap<>();
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
|
JSONArray forecastList = json.getJSONArray("list");
|
||||||
|
for (int i = 0; i < forecastList.length(); i++) {
|
||||||
|
JSONObject forecastEntry = forecastList.getJSONObject(i);
|
||||||
|
String dateTime = forecastEntry.getString("dt_txt");
|
||||||
|
String date = dateTime.split(" ")[0];
|
||||||
|
LocalDate forecastDate = LocalDate.parse(date, formatter);
|
||||||
|
|
||||||
|
if (forecastDate.isAfter(today) && !tempByDay.containsKey(date)) {
|
||||||
|
double temp = forecastEntry.getJSONObject("main").getDouble("temp");
|
||||||
|
String weather = forecastEntry.getJSONArray("weather").getJSONObject(0).getString("description");
|
||||||
|
|
||||||
|
tempByDay.put(date, temp);
|
||||||
|
weatherByDay.put(date, weather);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder forecast = new StringBuilder("3-Tage-Wettervorhersage:\n");
|
||||||
|
tempByDay.keySet().stream().sorted().limit(3).forEach(date -> {
|
||||||
|
forecast.append(String.format("%s - Temperatur: %.2f°C, Wetter: %s\n", date, tempByDay.get(date),
|
||||||
|
weatherByDay.get(date)));
|
||||||
|
});
|
||||||
|
|
||||||
|
return forecast.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue