public DataAccessLevel.Forecast GetCurWether(string path) { DataAccessLevel.SQLiteDatabaseWorker worker = new DataAccessLevel.SQLiteDatabaseWorker(); DataAccessLevel.Forecast forecast = new DataAccessLevel.Forecast(); // получаем текущий город из настроек worker.SetConnect(path); DataAccessLevel.SettingsDataContext sdc = worker.GetSettings(); // настройки worker.CloseConnect(); // sdc.cityID - id выбранного города // sdc.ID - id настройки try { HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com"); HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse(); if (HttpStatusCode.OK == rspFP.StatusCode) { // HTTP = 200 - Интернет безусловно есть! rspFP.Close(); DataAccessLevel.Forecast yandexForecast = new DataAccessLevel.Forecast(); switch (sdc.sourceID) { case 1: // owm // получаем город по ид яндекса GetCityByYaId worker.SetConnect(path); DataAccessLevel.CitiesDataContext city = worker.GetCityByYaId(sdc.cityID.ToString()); worker.CloseConnect(); // получаем прогноз owm по названию или owmid OpenWeatherMap.APIWorker owmworker = new APIWorker(); DataAccessLevel.Forecast owmForecast = owmworker.GetWeather(city.name, city.owmID); // сохраняем в базу worker.SetConnect(path); worker.SaveForecast(owmForecast); worker.CloseConnect(); break; case 2: // яндекс // получаем прогноз с яндекса (по ID города яндекса) Yandex.YandexMethods yaworker = new Yandex.YandexMethods(); yaworker.GetYandexForecast(sdc.cityID.ToString(), yandexForecast); // сохраняем в базу worker.SetConnect(path); worker.SaveForecast(yandexForecast); worker.CloseConnect(); return(yandexForecast); default: break; } // получаем текущее время - нужен id текущий города на яндексе Date_Time.GetTime getter = new Date_Time.GetTime(); DateTime CurDate = getter.Yandex_Time(sdc.cityID); // получаем прогноз из базы по установленному в настройках серверу worker.SetConnect(path); forecast = worker.GetForecast(CurDate); worker.CloseConnect(); int a = 0; return(forecast); } else { // сервер вернул отрицательный ответ, возможно что инета нет rspFP.Close(); MessageBox.Show("Подключение к интернету ограничено, данные могут быть неточными"); // получаем текущее время - нужен id текущий города на яндексе Date_Time.GetTime getter = new Date_Time.GetTime(); DateTime CurDate = getter.Yandex_Time(sdc.cityID); // получаем прогноз из базы по установленному в настройках серверу worker.SetConnect(path); forecast = worker.GetForecast(CurDate); worker.CloseConnect(); return(forecast); } } catch (WebException) { // Ошибка, значит интернета у нас нет. Плачем :'( MessageBox.Show("Невозможно подключиться к интернету, данные могут быть неточными"); // получаем прогноз из базы по установленному в настройках серверу worker.SetConnect(path); forecast = worker.GetForecast(DateTime.Now); worker.CloseConnect(); return(forecast); } }
public DataAccessLevel.Forecast GetWeather(string city, string owmid) { // получаем прогноз на 10 дней вперед с сервера XmlDocument xDoc = new XmlDocument(); if (owmid.Length > 0) { // запрос по id xDoc.Load("http://api.openweathermap.org/data/2.5/forecast?&id=" + owmid + "&mode=xml&units=metric&cnt=10&lang=ru"); } else { // по названию города xDoc.Load("http://api.openweathermap.org/data/2.5/forecast?&q=" + city + "," + "Россия" + "&mode=xml&units=metric&cnt=10&lang=ru"); } var Child1 = xDoc.ChildNodes; var Child2 = Child1[1].ChildNodes; for (int i = 0; i < Child2.Count; i++) { if (Child2[i].Name == "forecast") { forecastsList = Child2[i].ChildNodes; break; } } DataAccessLevel.Forecast forecast = new DataAccessLevel.Forecast(); for (int i = 0; i < forecastsList.Count; i++) { string symbol = ""; string description = ""; string windDirection = ""; string windSpeed = ""; string temperature = ""; string pressure = ""; string humidity = ""; var attr = forecastsList[i].Attributes; DateTime time = DateTime.Parse(forecastsList[i].Attributes.GetNamedItem("from").Value); NumberFormatInfo nfi = new CultureInfo("ru-RU", false).NumberFormat; nfi.NumberDecimalSeparator = "."; double temp; var weatherPar = forecastsList[i].ChildNodes; for (int k = 0; k < weatherPar.Count; k++) { var attr2 = weatherPar[k].Attributes; switch (weatherPar[k].Name) { case "symbol": symbol = "_" + weatherPar[k].Attributes.GetNamedItem("var").Value; description = weatherPar[k].Attributes.GetNamedItem("name").Value; break; case "windDirection": windDirection = DecodeWindDirection(weatherPar[k].Attributes.GetNamedItem("code").Value); break; case "windSpeed": temp = Double.Parse(weatherPar[k].Attributes.GetNamedItem("mps").Value, nfi); windSpeed = ((int)temp).ToString(); break; case "temperature": temp = Double.Parse(weatherPar[k].Attributes.GetNamedItem("value").Value, nfi); temperature = ((int)temp).ToString(); break; case "pressure": temp = Double.Parse(weatherPar[k].Attributes.GetNamedItem("value").Value, nfi) * 0.75; pressure = ((int)temp).ToString(); break; case "humidity": humidity = weatherPar[k].Attributes.GetNamedItem("value").Value; break; default: break; } } forecast.hourlyList.Add(new DataAccessLevel.HourlyForecastsDataContext { description = description, hummidity = humidity, periodDate = time.Date, periodTime = time.Hour, pressure = pressure, symbol = symbol, temperature = temperature, windDirection = windDirection, windSpeed = windSpeed }); } // из почасового делаем прогноз на день for (int i = 0; i < forecast.hourlyList.Count; i++) { switch (forecast.hourlyList[i].periodTime) { case 3: forecast.dailyList.Add(new DataAccessLevel.DailyForecastsDataContext { description = forecast.hourlyList[i].description, hummidity = forecast.hourlyList[i].hummidity, periodDate = forecast.hourlyList[i].periodDate, pressure = forecast.hourlyList[i].pressure, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "ночь", windDirection = forecast.hourlyList[i].windDirection, windSpeed = forecast.hourlyList[i].windSpeed }); forecast.tenDaysList.Add(new DataAccessLevel.TenDaysForecastsDataContext { periodDate = forecast.hourlyList[i].periodDate, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "ночь" }); break; case 9: forecast.dailyList.Add(new DataAccessLevel.DailyForecastsDataContext { description = forecast.hourlyList[i].description, hummidity = forecast.hourlyList[i].hummidity, periodDate = forecast.hourlyList[i].periodDate, pressure = forecast.hourlyList[i].pressure, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "утро", windDirection = forecast.hourlyList[i].windDirection, windSpeed = forecast.hourlyList[i].windSpeed }); break; case 15: forecast.dailyList.Add(new DataAccessLevel.DailyForecastsDataContext { description = forecast.hourlyList[i].description, hummidity = forecast.hourlyList[i].hummidity, periodDate = forecast.hourlyList[i].periodDate, pressure = forecast.hourlyList[i].pressure, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "день", windDirection = forecast.hourlyList[i].windDirection, windSpeed = forecast.hourlyList[i].windSpeed }); forecast.tenDaysList.Add(new DataAccessLevel.TenDaysForecastsDataContext { periodDate = forecast.hourlyList[i].periodDate, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "день" }); break; case 21: forecast.dailyList.Add(new DataAccessLevel.DailyForecastsDataContext { description = forecast.hourlyList[i].description, hummidity = forecast.hourlyList[i].hummidity, periodDate = forecast.hourlyList[i].periodDate, pressure = forecast.hourlyList[i].pressure, symbol = forecast.hourlyList[i].symbol, temperature = forecast.hourlyList[i].temperature, timeOfDay = "вечер", windDirection = forecast.hourlyList[i].windDirection, windSpeed = forecast.hourlyList[i].windSpeed }); break; } } return(forecast); }
private void button3_Click(object sender, EventArgs e) { DataAccessLevel.Forecast forecast = GetCurWether(@"D:\Database.db"); }