вторник, 19 июня 2012 г.

Парсер прогноза погоды с pogoda.mail.ru

Очень понравилась статья на хабре по прогнозу погоды и вывода на монитор, а так же просмотра данных из интернет.
Благо есть свободный (не используемый) монитор - решил попробовать...
Ниже немного переработанная под себя статья с хабра...

Спасибо современным технологиям, — температуру на улице и прогноз погоды можно в любой момент посмотреть на специальных сайтах (вроде pogoda.mail.ru или pogoda.yandex.ru).

Вообще, идея повесить в коридоре монитор и выводить на него всякие непотребности посещала меня много раз за последние годы, однако впихнуть даже самый маленький, 14-дюймовый монитор было некуда, а маленькие текстовые или графические дисплеи, которые так любят всякие моддеры, ну совершенно неинформативны и нечитаемы издалека.

Однажды, делая заказ на сайте DX я наткнулся на достаточно маленький (7 дюймов) телевизор с VGA-входом и решил воплотить свою идею в жизнь.



Непосредственно над входной дверью у меня в квартире есть небольшой шкаф, в котором я держал роутер, старый ноутбук, используемый как сервер, NAS и прочую «живность». Купленный мною телевизор-монитор вписался в этот зоопарк идеально.

Дальнейшее описание достаточно тривиально, — большую часть можно смело опустить.


Настройка сервера

Всё, что нам требуется от компьютера — показывать веб-страничку. Самый простой способ сделать это — поставить иксы, какой-нибудь лёгкий оконный менеджер, браузер и запускать всё это автоматически при запуске, открывая в браузере нашу страницу.

С иксами я не мучался и просто установил последнюю убунту (12.04), благо она оказалась LTS, да и стоявшую у меня для всяких тестов и разработки версию 8.04 давно пора было обновить.

Страничку будем отдавать с помощью nginx'а:
sudo apt-get install nginx


А гененировать по крону с помощью Mojolicious — замечательного фреймфорка:
curl get.mojolicio.us | sudo sh


Вообще, можно было бы и страничку отдавать с помощью Mojo, запустив скрипт (с малейшими переделками) через morbo, но вариант с nginx и генерацией статического файла тоже имеет право на существование — таким образом мы всегда отдаём браузеру сгенерированную страницу и у нас не будет задержек, да и кэширование, в случае с несколькими клиентами не помешает.

Создаём директорию, в которой будет лежать наша html-страничка:
sudo mkdir -p /var/www/weather/
sudo chown www-data:www-data /var/www/weather


Сохраняем наш перл-скрипт:
sudo curl https://raw.github.com/dreadatour/weather/master/weather.pl -o /usr/bin/generate-weather
sudo chmod +x /usr/bin/generate-weather


Добавляем в crontab строку для запуска скрипта. Для этого откроем файл /etc/crontab в любом текстовом редакторе:
sudo vim /etc/crontab


И добавим в конец следующую строку:
* * * * * www-data /usr/bin/generate-weather > /var/www/weather/index.html


Ждём, когда cron отработает и у нас появится файл с прогнозом погоды (файл будет обновляться раз в минуту):
ls /var/www/weather/index.html


Правим конфиг nginx /etc/nginx/sites-available/default:
server {
    listen 80;
    server_name localhost;
    root /var/www/weather/;
    index index.html;
}

И рестартим его:
sudo /etc/init.d/nginx restart


Проверяем, что всё работает как надо:
curl localhost

(мы должны получить нашу html-страницу).

Настройка системы

В качестве менеджера окон выбор пал на Openbox (более тяжёлые WM ставить не было никакого смысла). Ставим его:
sudo apt-get install openbox


В качестве браузера поставим хром (а точнее его вариацию — chromium):
sudo apt-get install chromium-browser


Ставим утилиту «unclutter» — с помощью неё скрываем курсор мыши:
sudo apt-get install unclutter


В настройках убунты включаем автоматический вход в систему — как оказалось, довольно неудобно после каждой перезагрузки залезать в шкаф и логиниться там с помощью клавиатуры ноутбука, а выводить клавиатуру наружу излишне и глупо.

Далее, создаём файл /usr/share/xsessions/chrome-session.desktop:
[Desktop Entry]
Name=chrome-session
Comment=Weather
Exec=/usr/bin/chrome-session


И файл /usr/bin/chrome-session:
#!/bin/sh
openbox-session &  # запускаем openbox
xrandr --output VGA1 --mode 800x600 &  # устанавливаем разрешение телевизора
xset s blank &  # выключаем screensaver
xset s 0 0 &
xset -dpms &
unclutter -idle 1 &  # прячем мышку
chromium-browser --kiosk "http://localhost/"  # запускаем браузер и открываем страницу с прогнозом


Браузер запускается в режиме «киоск» — в полноэкранном режиме.

Разлогиниваемся, выбираем в списке сессий нашу «chrome-session», вводим пароль и попадаем на страничку с прогнозом погоды. На всякий случай для проверки перегружаем компьютер:
sudo reboot

всё должно работать.

Не останавливаемся

Вместе с телевизором я заказал тач-панель соответствующих размеров, но при установке её я благополучно всё испортил: благодаря кривизне моих рук при закручивании крепёжных винтов панель треснула и отказалась работать. Я уже заказал ещё одну панель и в следующий раз буду аккуратнее.
В дальнейших планах — выводить на монитор пробки (удобно посмотреть их перед выходом, просто ткнув в экран), а так же другие плюшки, вроде изображения с дверного глазка, различных напоминаний и уведомлений.

Исходный код скрипта и конфигурационных файлов системы выложены на гитхабе.
Пример того, как это выглядит можно посмотреть тут: weather.dreadatour.ru

Взято с http://habrahabr.ru/post/144624/