Гаджет — хитрый прогноз погоды

31 Авг
2011

Идея проста:
  • Берем пачку (у меня пока что 3) сайтов с российскими прогнозами погоды. gismeteo.ru (Фобос), meteoinfo.ru (РосГидроМет), yandex.pogoda.ru (Foreca, насколько я знаю).
  • Вытаскиваем из них данные о погоде на последующие +6 +72 часа.
  • Записываем данные (температура, ветер, облачность, давление) с каждого сайта в файл для последующего сравнения с фактическими данными на этот же период.
  • В соответствии с рейтингом (изначально у каждого сайта рейтинг = 1) составляем среднее для всех метеопараметров и получаем средний прогноз погоды с учетом рейтинга доверия.
  • После первого запуска каждый раз, при достижении указанного в файле периода подсчитываются ошибки в прогнозе для каждого сайта и рейтинг доверия обновляется.

В итоге, чем больше запусков программы, тем больше, (теоретически) должна быть, точность прогнозов.
Я решил осуществить эту идею. Выбрал для начала свой город (Казань).
Ближайший на данный момент прогноз погоды я решил сделать для времени +6 часов.
Создал класс WeatherData для хранения метеопараметров со следующими полями:
        public double Temperature;
        public double Pressure;
        public double Humidity;
        public double PrecipitationIntensity;
        public double CloudsCoverage;
        public double PrecipitationSolidity;
        public double StormChance;
        public double WindSpeed;
        public double WindDirection;
        public DateTime Date;

А также класс Forecasts от которого унаследовал 3 класса для каждого из сайтов с перегруженным методом
        public virtual void DownLoad() { }

Далее начался нудный и долгий парсинг страничек. Использовал для этого htmlagilitypack. Сложность заключалась во времени, обновлениях на сайтах и отсутствии кое-где некоторых метеопараметров. Это разрешил через Linq.
Настроил учет фактических данных и пересчет рейтинга через статический класс FactManager. Парсил архив данных РосГидроМета. За норму для ошибок взял максимум по всем метеопараметрам. Ошибки суммируются в конфиге.
Нашел халявные и довольно сносные иконки для отображения погоды (хотя и их, как мне кажется мало). И построил контрол для отображения метеоданных WeatherDataView.
Ссылки на прогнозы погоды для Казани, рейтинги и некоторые настройки сохранил в xml конфиге. Изменил ссылки на прогнозы для Москвы и получил ожидаемый результат. Но в Москве на все 3 дня получилась ясная погода, поэтому для демонстрации иконок привожу местный прогноз:
image
Сейчас пользуюсь этой программой и очень ей рад. Обновляется каждые 3 часа, по-моему. Признаюсь, часто она бывает более точна в прогнозах, чем отдельные прогнозы с любого из этих сайтов. Планирую сделать ручную надстройку для выбора города и добавить еще один сайт rp5.ru.
P.S.
После 4-5 запусков ошибки в конфиге выглядят следующим образом:
        <add key="GismeteoError" value="10.667" />
        <add key="MeteoInfoError" value="11.000" />
        <add key="YandexError" value="15.500" />
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх