How to support OpenWeatherMap one call api 3.0. (#13414)
Add OpenCall API version property. Allowing for version 3.0 API to be set. Signed-off-by: Ross Buggins <20972856+rossbuggins@users.noreply.github.com>
This commit is contained in:
@@ -35,4 +35,5 @@ public class OpenWeatherMapAPIConfiguration {
|
||||
public @Nullable String apikey;
|
||||
public int refreshInterval;
|
||||
public @Nullable String language;
|
||||
public String apiVersion = "2.5";
|
||||
}
|
||||
|
||||
@@ -97,8 +97,9 @@ public class OpenWeatherMapConnection {
|
||||
// Weather icons (see https://openweathermap.org/weather-conditions)
|
||||
private static final String ICON_URL = "https://openweathermap.org/img/w/%s.png";
|
||||
// One Call API (see https://openweathermap.org/api/one-call-api )
|
||||
private static final String ONECALL_URL = "https://api.openweathermap.org/data/2.5/onecall";
|
||||
private static final String ONECALL_HISTORY_URL = "https://api.openweathermap.org/data/2.5/onecall/timemachine";
|
||||
private static final String ONECALL_URL = "https://api.openweathermap.org/data";
|
||||
private static final String ONECALL_DATA_SUFFIX_URL = "onecall";
|
||||
private static final String ONECALL_HISTORY_SUFFIX_URL = "onecall/timemachine";
|
||||
|
||||
private final OpenWeatherMapAPIHandler handler;
|
||||
private final HttpClient httpClient;
|
||||
@@ -325,7 +326,8 @@ public class OpenWeatherMapConnection {
|
||||
if (!exclude.isEmpty()) {
|
||||
params.put(PARAM_EXCLUDE, exclude.stream().collect(Collectors.joining(",")));
|
||||
}
|
||||
return gson.fromJson(getResponseFromCache(buildURL(ONECALL_URL, params)), OpenWeatherMapOneCallAPIData.class);
|
||||
return gson.fromJson(getResponseFromCache(buildURL(buildOneCallURL(), params)),
|
||||
OpenWeatherMapOneCallAPIData.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -346,7 +348,7 @@ public class OpenWeatherMapConnection {
|
||||
// the API requests the history as timestamp in Unix time format.
|
||||
params.put(PARAM_HISTORY_DATE,
|
||||
Long.toString(ZonedDateTime.now(ZoneId.of("UTC")).minusDays(days).toEpochSecond()));
|
||||
return gson.fromJson(getResponseFromCache(buildURL(ONECALL_HISTORY_URL, params)),
|
||||
return gson.fromJson(getResponseFromCache(buildURL(buildOneCallHistoryURL(), params)),
|
||||
OpenWeatherMapOneCallHistAPIData.class);
|
||||
}
|
||||
|
||||
@@ -383,6 +385,16 @@ public class OpenWeatherMapConnection {
|
||||
.collect(Collectors.joining("&", url + "?", ""));
|
||||
}
|
||||
|
||||
private String buildOneCallURL() {
|
||||
var config = handler.getOpenWeatherMapAPIConfig();
|
||||
return ONECALL_URL + "/" + config.apiVersion + "/" + ONECALL_DATA_SUFFIX_URL;
|
||||
}
|
||||
|
||||
private String buildOneCallHistoryURL() {
|
||||
var config = handler.getOpenWeatherMapAPIConfig();
|
||||
return ONECALL_URL + "/" + config.apiVersion + "/" + ONECALL_HISTORY_SUFFIX_URL;
|
||||
}
|
||||
|
||||
private String encodeParam(@Nullable String value) {
|
||||
return value == null ? "" : URLEncoder.encode(value, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,15 @@
|
||||
<label>API Key</label>
|
||||
<description>API key to access the OpenWeatherMap API.</description>
|
||||
</parameter>
|
||||
<parameter name="apiVersion" type="text">
|
||||
<label>One Call API Version</label>
|
||||
<description>One Call API version (defaults to 2.5, version 3.0 is available, but needs different subscription).</description>
|
||||
<default>2.5</default>
|
||||
<options>
|
||||
<option value="2.5">2.5</option>
|
||||
<option value="3.0">3.0</option>
|
||||
</options>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer" min="1" unit="min">
|
||||
<label>Refresh Interval</label>
|
||||
<description>Specifies the refresh interval (in minutes).</description>
|
||||
|
||||
@@ -76,6 +76,8 @@ thing-type.openweathermap.weather-api.description = Provides access to the OpenW
|
||||
|
||||
bridge-type.config.openweathermap.weather-api.apikey.label = API Key
|
||||
bridge-type.config.openweathermap.weather-api.apikey.description = API key to access the OpenWeatherMap API.
|
||||
bridge-type.config.openweathermap.weather-api.apiVersion.label = One Call API Version
|
||||
bridge-type.config.openweathermap.weather-api.apiVersion.description = One Call API version (defaults to 2.5, version 3.0 is available, but needs different subscription).
|
||||
bridge-type.config.openweathermap.weather-api.language.label = Language
|
||||
bridge-type.config.openweathermap.weather-api.language.description = Language to be used by the OpenWeatherMap API.
|
||||
bridge-type.config.openweathermap.weather-api.language.option.af = Afrikaans
|
||||
|
||||
Reference in New Issue
Block a user