Погодный информер (Weather Informer)
Добавлено: 23 окт 2013, 18:19
Проектом назвать это можно с натяжкой
Но вот что получилось, может куму-то и сгодиться.
А если с Вашей помощью еще и довести до презентабельного вида, то вполне сойдет для ежедневного использования.
До этого я дергал погоду с сайта GisMeteo.ru: http://www.gismeteo.ru/informers/
О том как разобрать полученную информацию я писал пару строк в уроке: http://labviewportal.org/ru/sovetyiprav ... -xml-parse
Но с недавнего времени там изменились условия предоставления информации, не буду грузить..., короче не удобно стало его использовать.
Нашел сайт: http://openweathermap.org
Дам достаточно удобный интерфейс API (http://openweathermap.org/API), позволяющий разработчикам получать различные данные о погоде. Что мне понравилось в этом сервисе, так это толерантность к запросам. Например, нас интересуют данные о погоде в Москве с интервалом в 3 часа. Сравните результат:
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
Это была увертюра, а теперь основная часть.
Что нам нужно...
1. Построить запрос и получить данные, результат удобнее, не знаю как Вам, а мне проще разбирать XML.
2. Проверить корректность (целостность) данных разобрать XML на составляющие.
3. Красиво все отобразить, с этим у меня основные проблемы, так как мой технический мозг не переносит дизайнерской работы.
4. Ну и соответственно, делать запросы нужно с какой-то периодичностью.
Начнем по порядку...
Не буду расписывать азы и тонкости реализации всех этапов, каждый может посмотреть исходники. Но если появятся вопросы, то постараюсь на них ответить.
1. Построить запрос и получаем данные используя HTTP Request (GET).vi
2. Встроенный парсер проверяет структуру документа и его целостность, по этому здесь нужно только проконтролировать. Данные парсим стандартными средствами LabVIEW. Многим покажется излишняя вложенность SubVI, но как сделал, так сделал. Зато все понятно и структурировано.
3. Этот этап самый сложный. Так что если есть готовые оказать помощь в оформлении интерфейса, готов посодействовать. Пока это выглядит следующим образом (выглядело в предварительной версии, в выложенной немного изменилось, но смысл тот же): 4. Что касается периодичности, то я пошел кратчайшим путем. Цикл крутится раз в минуту. Если текущее время <= времени nextupdate (вкладка Setup), то запрашиваем данные с сервера. В случае удачного получения данных время nextupdate обновляется (его назначает сервер). Если данные не были получены или получены с ошибкой, то перезапрос выполняется через минуту, на следующей итерации цикла. Ну и при желании можно выполнить запрос вручную, нажав кнопку UpDate.
Данные о необходимом городе записаны в файле Data.txt. Если он отсутствует, то по умолчанию запрашивается погода г. Москва. Если ввести свой город в поле запроса, а потом остановить программу, нажав кнопку Stop, то Ваши данные будут сохранены в файл и при следующем запуске программы Москвы уже не будет.
--------------------------
Что касается критики и доработок...
Я вижу следующие проблемы (но как говориться "В чужом глазу соринку видит, а в своём бревна не замечает"):
1. Самое главное это интерфейс.
2. При запросе данных с сервера программа подвисает (не реагирует на нажатие кнопок панели управления). Все сделано в одном цикле, и разносить по разным не вижу смысла, т.к. это всего 1-3 секунды из 3-х часов. Да и работает программа полностью в автоматическом режиме.
---------------------------
Ну и сама программа (LV2010), если необходимо в более низкой версии, пишите: Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.
Но вот что получилось, может куму-то и сгодиться.
А если с Вашей помощью еще и довести до презентабельного вида, то вполне сойдет для ежедневного использования.
До этого я дергал погоду с сайта GisMeteo.ru: http://www.gismeteo.ru/informers/
О том как разобрать полученную информацию я писал пару строк в уроке: http://labviewportal.org/ru/sovetyiprav ... -xml-parse
Но с недавнего времени там изменились условия предоставления информации, не буду грузить..., короче не удобно стало его использовать.
Нашел сайт: http://openweathermap.org
Дам достаточно удобный интерфейс API (http://openweathermap.org/API), позволяющий разработчикам получать различные данные о погоде. Что мне понравилось в этом сервисе, так это толерантность к запросам. Например, нас интересуют данные о погоде в Москве с интервалом в 3 часа. Сравните результат:
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
Это была увертюра, а теперь основная часть.
Что нам нужно...
1. Построить запрос и получить данные, результат удобнее, не знаю как Вам, а мне проще разбирать XML.
2. Проверить корректность (целостность) данных разобрать XML на составляющие.
3. Красиво все отобразить, с этим у меня основные проблемы, так как мой технический мозг не переносит дизайнерской работы.
4. Ну и соответственно, делать запросы нужно с какой-то периодичностью.
Начнем по порядку...
Не буду расписывать азы и тонкости реализации всех этапов, каждый может посмотреть исходники. Но если появятся вопросы, то постараюсь на них ответить.
1. Построить запрос и получаем данные используя HTTP Request (GET).vi
2. Встроенный парсер проверяет структуру документа и его целостность, по этому здесь нужно только проконтролировать. Данные парсим стандартными средствами LabVIEW. Многим покажется излишняя вложенность SubVI, но как сделал, так сделал. Зато все понятно и структурировано.
3. Этот этап самый сложный. Так что если есть готовые оказать помощь в оформлении интерфейса, готов посодействовать. Пока это выглядит следующим образом (выглядело в предварительной версии, в выложенной немного изменилось, но смысл тот же): 4. Что касается периодичности, то я пошел кратчайшим путем. Цикл крутится раз в минуту. Если текущее время <= времени nextupdate (вкладка Setup), то запрашиваем данные с сервера. В случае удачного получения данных время nextupdate обновляется (его назначает сервер). Если данные не были получены или получены с ошибкой, то перезапрос выполняется через минуту, на следующей итерации цикла. Ну и при желании можно выполнить запрос вручную, нажав кнопку UpDate.
Данные о необходимом городе записаны в файле Data.txt. Если он отсутствует, то по умолчанию запрашивается погода г. Москва. Если ввести свой город в поле запроса, а потом остановить программу, нажав кнопку Stop, то Ваши данные будут сохранены в файл и при следующем запуске программы Москвы уже не будет.
--------------------------
Что касается критики и доработок...
Я вижу следующие проблемы (но как говориться "В чужом глазу соринку видит, а в своём бревна не замечает"):
1. Самое главное это интерфейс.
2. При запросе данных с сервера программа подвисает (не реагирует на нажатие кнопок панели управления). Все сделано в одном цикле, и разносить по разным не вижу смысла, т.к. это всего 1-3 секунды из 3-х часов. Да и работает программа полностью в автоматическом режиме.
---------------------------
Ну и сама программа (LV2010), если необходимо в более низкой версии, пишите: Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.