Skip to content

Commit e053e16

Browse files
committed
feat(apix): historical endpoint
1 parent fe68b42 commit e053e16

2 files changed

Lines changed: 82 additions & 1 deletion

File tree

lib/src/main/kotlin/com/openmeteo/apix/OpenMeteo.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.openmeteo.apix.forecast.Forecast
1616
import com.openmeteo.apix.geocoding.GeocodingGet
1717
import com.openmeteo.apix.geocoding.GeocodingSearch
1818
import com.openmeteo.apix.gfs.Gfs
19-
import kotlinx.serialization.SerialName
19+
import com.openmeteo.apix.historical.Historical
2020

2121
class OpenMeteo(
2222
override val latitude: Float = 0f,
@@ -28,6 +28,7 @@ class OpenMeteo(
2828
val geocodingGet: Endpoint = Endpoint(GeocodingGet.context),
2929
val geocodingSearch: Endpoint = Endpoint(GeocodingSearch.context),
3030
val gfs: Endpoint = Endpoint(Gfs.context),
31+
val historical: Endpoint = Endpoint(Historical.context),
3132
) : QueryCoordinates {
3233

3334
constructor(coordinates: Pair<Float, Float>) : this(
@@ -66,6 +67,9 @@ class OpenMeteo(
6667
operator fun invoke(query: Gfs.Query) =
6768
gfs.query<Gfs.Response>(query)
6869

70+
operator fun invoke(query: Historical.Query) =
71+
historical.query<Historical.Response>(query)
72+
6973
fun airQuality(
7074
latitude: Float = this.latitude,
7175
longitude: Float = this.longitude,
@@ -141,4 +145,18 @@ class OpenMeteo(
141145
temperatureUnit, windSpeedUnit, precipitationUnit, timeZone, startDate,
142146
endDate, pastDays, forecastDays))
143147

148+
fun historical(
149+
latitude: Float = this.latitude,
150+
longitude: Float = this.longitude,
151+
hourly: Iterable<com.openmeteo.apix.historical.Hourly>? = null,
152+
daily: Iterable<com.openmeteo.apix.historical.Daily>? = null,
153+
temperatureUnit: TemperatureUnit? = null,
154+
windSpeedUnit: WindSpeedUnit? = null,
155+
precipitationUnit: PrecipitationUnit? = null,
156+
timeZone: TimeZone? = null,
157+
startDate: Date? = null,
158+
endDate: Date? = null,
159+
) = invoke(Historical.Query(latitude, longitude, hourly, daily, temperatureUnit,
160+
windSpeedUnit, precipitationUnit, timeZone, startDate, endDate))
161+
144162
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.openmeteo.apix.historical
2+
3+
import com.openmeteo.apix.common.query.*
4+
import com.openmeteo.apix.common.response.ResponseCoordinates
5+
import com.openmeteo.apix.common.response.ResponseDaily
6+
import com.openmeteo.apix.common.response.ResponseGenerationTimed
7+
import com.openmeteo.apix.common.response.ResponseHourly
8+
import com.openmeteo.apix.common.time.Date
9+
import com.openmeteo.apix.common.time.TimeZone
10+
import com.openmeteo.apix.common.units.PrecipitationUnit
11+
import com.openmeteo.apix.common.units.TemperatureUnit
12+
import com.openmeteo.apix.common.units.Unit
13+
import com.openmeteo.apix.common.units.WindSpeedUnit
14+
import kotlinx.serialization.SerialName
15+
import kotlinx.serialization.Serializable
16+
import java.net.URL
17+
18+
object Historical {
19+
20+
val context = URL("https://archive-api.open-meteo.com/v1/era5")
21+
22+
class Query(
23+
override val latitude: Float,
24+
override val longitude: Float,
25+
override val hourly: Iterable<Hourly>? = null,
26+
override val daily: Iterable<Daily>? = null,
27+
val temperatureUnit: TemperatureUnit? = null,
28+
val windSpeedUnit: WindSpeedUnit? = null,
29+
val precipitationUnit: PrecipitationUnit? = null,
30+
override val timeZone: TimeZone? = null,
31+
override val startDate: Date? = null,
32+
override val endDate: Date? = null,
33+
) : QueryCoordinates,
34+
QueryHourly,
35+
QueryDaily,
36+
QueryDateRange
37+
38+
@Serializable
39+
class Response(
40+
override val latitude: Float,
41+
override val longitude: Float,
42+
@SerialName("utc_offset_seconds")
43+
override val utcOffsetSeconds: Int,
44+
@SerialName("timezone")
45+
override val timeZone: TimeZone,
46+
@SerialName("timezone_abbreviation")
47+
override val timeZoneAbbreviation: String,
48+
@SerialName("hourly_units")
49+
override val hourlyUnits: Map<Hourly, Unit>? = null,
50+
@SerialName("hourly")
51+
override val hourlyValues: Map<Hourly, Array<Double?>>? = null,
52+
@SerialName("daily_units")
53+
override val dailyUnits: Map<Daily, Unit>? = null,
54+
@SerialName("daily")
55+
override val dailyValues: Map<Daily, Array<Double?>>? = null,
56+
@SerialName("generationtime_ms")
57+
override val generationTimeMs: Float,
58+
) : ResponseCoordinates,
59+
ResponseHourly<Hourly>,
60+
ResponseDaily<Daily>,
61+
ResponseGenerationTimed
62+
63+
}

0 commit comments

Comments
 (0)