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:
rossbuggins
2022-09-24 20:15:19 +01:00
committed by GitHub
parent 6241d6f369
commit 80804a59b0
5 changed files with 33 additions and 4 deletions

View File

@@ -35,4 +35,5 @@ public class OpenWeatherMapAPIConfiguration {
public @Nullable String apikey;
public int refreshInterval;
public @Nullable String language;
public String apiVersion = "2.5";
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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