2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.tankerkoenig.internal.data;
15 import java.io.IOException;
16 import java.net.MalformedURLException;
17 import java.util.Properties;
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.eclipse.jdt.annotation.Nullable;
21 import org.openhab.binding.tankerkoenig.internal.dto.TankerkoenigDetailResult;
22 import org.openhab.binding.tankerkoenig.internal.dto.TankerkoenigListResult;
23 import org.openhab.binding.tankerkoenig.internal.serializer.CustomTankerkoenigDetailResultDeserializer;
24 import org.openhab.binding.tankerkoenig.internal.serializer.CustomTankerkoenigListResultDeserializer;
25 import org.openhab.core.io.net.http.HttpUtil;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
29 import com.google.gson.Gson;
30 import com.google.gson.GsonBuilder;
33 * Serivce class requesting data from tankerkoenig api and providing result objects
35 * @author Dennis Dollinger - Initial contribution
36 * @author Juergen Baginski - Initial contribution
39 public class TankerkoenigService {
40 private final Logger logger = LoggerFactory.getLogger(TankerkoenigService.class);
42 private final Gson gson = new GsonBuilder()
43 .registerTypeAdapter(TankerkoenigListResult.class, new CustomTankerkoenigListResultDeserializer()).create();
44 private final Gson gsonDetail = new GsonBuilder()
45 .registerTypeAdapter(TankerkoenigDetailResult.class, new CustomTankerkoenigDetailResultDeserializer())
47 private static final int REQUEST_TIMEOUT = 5000;
49 public @Nullable TankerkoenigListResult getStationListData(String apikey, String locationIDs, String userAgent) {
50 return getTankerkoenigListResult(apikey, locationIDs, userAgent);
53 public @Nullable TankerkoenigDetailResult getStationDetailData(String apikey, String locationID, String userAgent) {
54 return getTankerkoenigDetailResult(apikey, locationID, userAgent);
57 private @Nullable String getResponseString(String apiKey, String locationIDs, String userAgent, boolean detail)
59 StringBuilder sb = new StringBuilder();
60 sb.append("https://creativecommons.tankerkoenig.de/json/");
62 sb.append("detail.php?id=");
64 sb.append("prices.php?ids=");
66 sb.append(locationIDs);
67 sb.append("&apikey=");
69 String url = sb.toString();
71 Properties urlHeader = new Properties();
72 urlHeader.put("USER-AGENT", userAgent);
73 return HttpUtil.executeUrl("GET", url, urlHeader, null, "", REQUEST_TIMEOUT);
74 } catch (MalformedURLException e) {
75 logger.debug("Error in getResponseString: ", e);
80 private @Nullable TankerkoenigListResult getTankerkoenigListResult(String apikey, String locationIDs,
83 String jsonData = getResponseString(apikey, locationIDs, userAgent, false);
84 logger.debug("json-String: {}", jsonData);
85 return gson.fromJson(jsonData, TankerkoenigListResult.class);
86 } catch (IOException e) {
87 logger.debug("Error in getTankerkoenigListResult: ", e);
88 // the return of an empty result will force the status-update OFFLINE!
89 return TankerkoenigListResult.emptyResult();
93 private @Nullable TankerkoenigDetailResult getTankerkoenigDetailResult(String apiKey, String locationID,
96 String jsonData = getResponseString(apiKey, locationID, userAgent, true);
97 logger.debug("getTankerkoenigDetailResult jsonData : {}", jsonData);
98 return gsonDetail.fromJson(jsonData, TankerkoenigDetailResult.class);
99 } catch (IOException e) {
100 logger.debug("getTankerkoenigDetailResult IOException: ", e);
101 // the return of an empty result will force the status-update OFFLINE!
102 return TankerkoenigDetailResult.emptyResult();