Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 private void button3_Click(object sender, EventArgs e)
 {
     DataAccessLevel.Forecast forecast = GetCurWether(@"D:\Database.db");
 }