// private methods private static string GenerateRequestUrl(Language language, WeatherDataType dataType) { var url = "https://data.weather.gov.hk/weatherAPI/opendata/weather.php?"; switch (language) { case Language.English: url += "lang=en"; break; case Language.TraditionalChinese: url += "lang=tc"; break; case Language.SimplifiedChinese: url += "lang=sc"; break; } ; switch (dataType) { case WeatherDataType.LocalWeatherForecast: url += "&dataType=flw"; break; case WeatherDataType.NineDaysWeather: url += "&dataType=fnd"; break; } return(url); }
public async Task <bool> SendGenericDataUpdateByDataTypeAsync(byte[] data, WeatherDataType dataType) { if (this.AppServiceConnection == null) { await this.InitializeAsync(); } var message = CreateMessage(GetCharacteristicUuidByWeatherDataType(dataType), data); var errorMessage = await this.AppServiceConnection.SendMessageWithResponseAsync(message); return(string.IsNullOrWhiteSpace(errorMessage)); }
// private methods private static string GenerateRequestUrl(Language language, WeatherDataType dataType) { var url = "https://data.weather.gov.hk/weatherAPI/opendata/weather.php?"; url += language switch { Language.English => "lang=en", Language.TraditionalChinese => "lang=tc", Language.SimplifiedChinese => "lang=sc", _ => "lang=en" }; url += dataType switch { WeatherDataType.LocalWeatherForecast => "&dataType=flw", WeatherDataType.NineDaysWeather => "&dataType=fnd" }; return(url); }
private async Task <IWeatherData> GetForecastDataAsync(WeatherDataType weatherDataType, string input) { var querry = weatherDataType == WeatherDataType.CurrentWeather ? "weather" : "forecast"; var call = !int.TryParse(input, out int _) ? "q" : "id"; var url = new Uri($"http://api.openweathermap.org/data/2.5/{querry}?{call}={input}&units=Metric&appid={ApiKey}&lang=pl").ToString(); var httpRequest = new HttpRequestMessage { Method = new HttpMethod("GET"), RequestUri = new Uri(url) }; try { using (HttpResponseMessage httpResponse = await HttpClient.SendAsync(httpRequest).ConfigureAwait(false)) { if (!httpResponse.IsSuccessStatusCode) { httpRequest.Dispose(); throw new HttpOperationException($"Operation returned an invalid status code '{httpResponse.StatusCode}'"); } else { string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); try { return(weatherDataType == WeatherDataType.CurrentWeather ? SafeJsonConvert.DeserializeObject <HourlyForecastTransferObject>(responseContent, new CurrentWeatherDataConverter()) : SafeJsonConvert.DeserializeObject <FourDaysForecastTransferObject>(responseContent, new FourDaysForecastDataConverter()) as IWeatherData); } catch (JsonException ex) { httpRequest.Dispose(); throw new SerializationException("Unable to deserialize the response", responseContent, ex); } } } } catch (HttpRequestException ex) { throw new TaskCanceledException("Unable to get a HTTP response message", ex); } }
static Guid GetCharacteristicUuidByWeatherDataType(WeatherDataType weatherDataType) { switch (weatherDataType) { case WeatherDataType.City: return(Asteroid.WeatherCityCharacteristicUuid); case WeatherDataType.IDs: return(Asteroid.WeatherIDsCharacteristicUuid); case WeatherDataType.MinTemperatures: return(Asteroid.WeatherMinTemperaturesCharacteristicUuid); case WeatherDataType.MaxTemperatures: return(Asteroid.WeatherMaxTemperaturesCharacteristicUuid); default: throw new NotSupportedException($"Unsupported {nameof(weatherDataType)}: {weatherDataType}"); } }