diff --git a/app/src/main/kotlin/WeatherApp.kt b/app/src/main/kotlin/WeatherApp.kt index e0c098a..d9f66d6 100644 --- a/app/src/main/kotlin/WeatherApp.kt +++ b/app/src/main/kotlin/WeatherApp.kt @@ -1,12 +1,59 @@ package hu.vanio.kotlin.feladat.ms +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.core.JsonProcessingException +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import java.net.URL +import java.time.LocalDate import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication +import java.io.IOException @SpringBootApplication class WeatherApp fun main() { runApplication() + val url = "https://api.open-meteo.com/v1/forecast?latitude=47.4984&longitude=19.0404&hourly=temperature_2m&timezone=auto" + + try { + val json = URL(url).readText() + val forecast = jacksonObjectMapper().readValue(json) + + val dailyAverages = averageTempreature(forecast) + printForecast(dailyAverages) + + } catch (e: IOException) { + println("Adatok letöltése sikertelen: ${e.message}") + } catch (e: JsonProcessingException) { + println("JSON feldolgozása sikertelen: ${e.message}") + } +} + +@JsonIgnoreProperties(ignoreUnknown = true) +data class Forecast(val hourly: HourlyData) +//@JsonIgnoreProperties(ignoreUnknown = true) +data class HourlyData(val time: List, val temperature_2m: List) + +fun averageTempreature(forecast: Forecast): Map { + val dailyTemperatures = mutableMapOf>() + + forecast.hourly.time.forEachIndexed { index, timestamp -> + val date = LocalDate.parse(timestamp.substring(0, 10)) + val temperature = forecast.hourly.temperature_2m[index] + + if (dailyTemperatures.containsKey(date)) { + dailyTemperatures[date]!!.add(temperature) + } else { + dailyTemperatures[date] = mutableListOf(temperature) + } + } + return dailyTemperatures.mapValues { it.value.average() } } +fun printForecast(dailyAverages: Map) { + dailyAverages.forEach { (date, temperature) -> + println("$date: $temperature °C") + } +} \ No newline at end of file diff --git a/app/src/test/kotlin/WeatherAppTest.kt b/app/src/test/kotlin/WeatherAppTest.kt index a81a55a..2ba4f53 100644 --- a/app/src/test/kotlin/WeatherAppTest.kt +++ b/app/src/test/kotlin/WeatherAppTest.kt @@ -1,11 +1,57 @@ package hu.vanio.kotlin.feladat.ms +import java.time.LocalDate import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals class WeatherAppTest { - @Test fun `sikeres lekerdezes`() { - TODO() + @Test + fun `sikeres lekerdezes`() { + val forecast = Forecast( + HourlyData( + listOf( + "2024-03-18T00:00", "2024-03-18T01:00", "2024-03-18T02:00", + "2024-03-19T00:00", "2024-03-19T01:00", "2024-03-19T02:00", + "2024-03-20T00:00", "2024-03-20T01:00", "2024-03-20T02:00" + ), + listOf( + 6.0, 5.7, 5.4, 5.2, 4.3, 4.6, 6.5, 7.7, 8.9 + ) + ) + ) + val result = averageTempreature(forecast) + + val expected = mapOf( + LocalDate.parse("2024-03-18") to 5.7, + LocalDate.parse("2024-03-19") to 4.7, + LocalDate.parse("2024-03-20") to 7.7 + ) + assertEquals(expected, result) } + @Test + fun `sikertelen lekerdezes`() { + val forecast = Forecast( + HourlyData( + listOf("2024-03-18T00:00", "2024-03-18T01:00", "2024-03-18T02:00", + "2024-03-19T00:00", "2024-03-19T01:00", "2024-03-19T02:00", + "2024-03-20T00:00", "2024-03-20T01:00", "2024-03-20T02:00" + ), + listOf( + 6.0, 5.7, 5.4, 5.2, 4.3, 4.6, 6.5, 7.7, 11.1 + ) + ) + ) + val result = averageTempreature(forecast) + + val expected = mapOf( + LocalDate.parse("2024-03-18") to 5.7, + LocalDate.parse("2024-03-19") to 4.7, + LocalDate.parse("2024-03-20") to 7.4 + ) + //3.nap 8.43 + assertNotEquals(expected, result); + } } \ No newline at end of file