В связи с тем, что с помощью conkyForecast получать прогноз погоды бесплатно теперь невозможно, попытаюсь объяснить как я беру прогноз погоды с сайта http://www.wunderground.com/. Сначала как это выглядит
Рисунок ночь
Рисунок день
Выводится текущий прогноз с переключением картинки на дневную и ночную. Сначала я хотел брать иконки погоды из сети, но оказалось, что это занимает много времени при запуске коньков. Поэтому все картинки скачены с интернета и помещены в папку weathericons. Можно взять любые иконки, но тогда необходимо их переименовать.
Тем, кому важен результат, можно взять готовые коньки здесь. Ну а тем, кто хочет разобраться, как всё это работает и как написать подобные коньки, начинаю свой рассказ.
Conkyrc можно взять любой, главное чтобы conky, установленные на компьютере, были с поддержкой lua. Короче говоря должны быть установлены conky-all, которые имеют поддержку языка lua.
Так как эти conky выводят только погоду, то ниже слова TEXT в conkyrc имеется только одна строка.
Команда execi через заданный интервал времени в секундах запускает скрипт pogoda.sh, путь до которой необходимо указать. Другими словами в этой строке каждые 10 минут запускается скрипт pogoda.sh находящийся в папке scripts, которая находится в папке conky_20.03.2011, которая в свою очередь находится в домашней директории.
Скрипт pogoda.sh забирает данные с сайта http://www.wunderground.com/. Первая строка
говорит о том, что скрипт написан на bash
Вторая строка
содержит ссылку на адрес города на сайте http://www.wunderground.com/
Для вывода прогноза Вашего города необходимо зайти на сайт http://www.wunderground.com и вписать название своего города. Если город будет найден вы перейдете на страницу с прогнозом погоды. В правом верхнем углу находятся две кнопки ICAL(зелёная) and RSS(красная). Щелкните правой кнопкой мыши по красной кнопке и скопируйте ссылку на адрес.
В строке необходимо заменить данные с адресом, т.к. в приведённом примере дан код Санкт-Петербурга
на скопированные вами данные.
Строки
направляют промежуточные и отфильтрованные данные для хранения в папку /tmp
Строки
стирают старые данные при получении новых
Строки
отфильтровывают данные в файл /tmp/weathertext откуда они забираются для вывода в окно коньков.
Вывод всего этого на экран производится с помощью нескольких скриптов расположенных в папке scripts, но может быть расположено согласно вашего желания в любом месте, главное прописать правильные пути к скриптам.
Для запуска lua-скриптов в conkyrc, выше слова TEXT добавляем строки
lua_load ~/conky_20.03.2011/scripts/main.lua
lua_draw_hook_pre conky_main
Первая строка указывает на место хранения скрипта, а вторая запускает скрипт.
Скрипт main.lua содержит все основные данные необходимые для вывода. Рассмотрим что в нём находится.
Так как в скриптах используются команды языка cairo и также необходимо забирать данные из папки /tmp, первые строки скрипта указывает конькам, что это необходимо учитывать
Строка
позволяет запускать данные коньки на любом компьютере, т.е. нет необходимости редактировать скрипты изменяя название домашней директории, всё будет происходить автоматически.
Строка
задает значение цвета, в данном скрипте цвет шрифта, сразу для всех выводимых значений
Согласно программе conky возможен запуск только двух lua-скриптов, для запуска более двух lua-скриптов можно использовать такой способ
Эти строки сообщают программе, что необходимо использовать ещё два lua-скрипта расположенных по соответствующим адресам.
Далее расположена сама функция которая задает размеры, шрифт, цвет всем выводимым текстам и запускает скрипты вывода текстов и изображений
Объясню, что означают следующие строки на примере первого блока данных
Первая строка задает значение переменной text. Это значение забирается из первой строки файла /tmp/weathertext
Далее следуют:
- координаты, куда будет выведен этот текст
- размер шрифта
- "жирный" шрифт
- координаты соответствуют середине текста (центровка текста)
- цвет шрифта
Второй блок выводит данные о давлении, но так как мне привычней видеть давление в миллиметрах ртутного столба, то полученные данные в миллибарах переводятся в мм.рт.ст делением на 1.33322
Третий блок выводит направление ветра
Четвёртый - скорость ветра, переведённая в м/сек
Пятая - влажность в процентах
Далее следует обязательный блок необходимый для работы срипта
Проверяем, существует ли окно conky
if conky_window==nil then return end
Забираем данные об окне conky
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
Ну и наконец строки запускающие скрипт вывода иконок погоды и скрипт вывода текста. Можно было всё поместить в один скрипт, но мне кажется, что имея скрипты, выполняющие разные функции, легче их редактировать, улучшать, заменять и т.д. и т.п. Но это моё личное мнение.
Скрипт вывода иконок погоды запускается следующими строками
cr = cairo_create (cs)
draw_image_rect(cr, 7, 10, 120, "weather")
cairo_destroy(cr)
Здесь первая строка
cr = cairo_create (cs)
"говорит" программе, что необходимо в окне conky
Вторая строка
draw_image_rect(cr, 7, 10, 120, "weather")
дает команду запустить функцию с названием draw_image_rect которая выведет в окно conky в позицию с координатами x=7, y=10, размером 100 пикселей картинку с названием weather
Третья строка закрывает окно conky
Скрипт вывода текста немного сложнее
Строка
даёт команду считать из weather_settings один блок данных.
в окно conky cr = cairo_create (cs)
Запускается функция display_text(v) с полученными данными
Закрывается окно cairo_destroy(cr)
Если есть ещё блоки с данными в weather_settings то берется очередной блок с данными, иначе переход к следующим строкам скрипта end
Строка
cairo_surface_destroy(cs)
Закрывает окно конки для ввода изображений.
О выводе иконок погоды я расскажу в следующем посте, а о выводе текста уже было написано ранее.
Рисунок ночь
Рисунок день
Выводится текущий прогноз с переключением картинки на дневную и ночную. Сначала я хотел брать иконки погоды из сети, но оказалось, что это занимает много времени при запуске коньков. Поэтому все картинки скачены с интернета и помещены в папку weathericons. Можно взять любые иконки, но тогда необходимо их переименовать.
Тем, кому важен результат, можно взять готовые коньки здесь. Ну а тем, кто хочет разобраться, как всё это работает и как написать подобные коньки, начинаю свой рассказ.
Conkyrc можно взять любой, главное чтобы conky, установленные на компьютере, были с поддержкой lua. Короче говоря должны быть установлены conky-all, которые имеют поддержку языка lua.
Так как эти conky выводят только погоду, то ниже слова TEXT в conkyrc имеется только одна строка.
${execi 600 sh ~/conky_20.03.2011/scripts/pogoda.sh}
Команда execi через заданный интервал времени в секундах запускает скрипт pogoda.sh, путь до которой необходимо указать. Другими словами в этой строке каждые 10 минут запускается скрипт pogoda.sh находящийся в папке scripts, которая находится в папке conky_20.03.2011, которая в свою очередь находится в домашней директории.
Скрипт pogoda.sh забирает данные с сайта http://www.wunderground.com/. Первая строка
#!/bin/bash
говорит о том, что скрипт написан на bash
Вторая строка
urlInfosWeather="http://rss.wunderground.com/auto/rss_full/global/stations/26063.xml?units=metric"
содержит ссылку на адрес города на сайте http://www.wunderground.com/
Для вывода прогноза Вашего города необходимо зайти на сайт http://www.wunderground.com и вписать название своего города. Если город будет найден вы перейдете на страницу с прогнозом погоды. В правом верхнем углу находятся две кнопки ICAL(зелёная) and RSS(красная). Щелкните правой кнопкой мыши по красной кнопке и скопируйте ссылку на адрес.
В строке необходимо заменить данные с адресом, т.к. в приведённом примере дан код Санкт-Петербурга
"http://rss.wunderground.com/auto/rss_full/global/stations/26063.xml?units=metric"
на скопированные вами данные.
Строки
fileTmpWeather="/tmp/weathertemp"
fileWeatherText="/tmp/weathertext"
направляют промежуточные и отфильтрованные данные для хранения в папку /tmp
Строки
if [ -f $fileTmpWeather ]; then
rm $fileTmpWeather
fi
стирают старые данные при получении новых
Строки
wget -O $fileTmpWeather $urlInfosWeather
sed -i -e 's/&/\n/g' -e 's/>/\n/g' -e 's/\//\n/g' -e 's/</\n/g' $fileTmpWeather
egrep -i 'Temperature:| Humidity:| Pressure:' $fileTmpWeather > $fileWeatherText
sed -i -e 's/!//g' -e 's/\[CDATA\[//g' -e 's/deg\;C//g' -e 's/ | //g' $fileWeatherText
sed -i -e 's/Temperature: //g' -e 's/Humidity: //g' -e 's/%/\n/g' $fileWeatherText
sed -i -e 's/Pressure: //g' -e 's/hPa /\n/g' -e 's/(//g' $fileWeatherText
sed -i -e 's/)Conditions: /\n/g' -e 's/Wind Direction: /\n/g' $fileWeatherText
sed -i -e 's/Wind Speed: /\n/g' -e 's/km//g' $fileWeatherText
отфильтровывают данные в файл /tmp/weathertext откуда они забираются для вывода в окно коньков.
Вывод всего этого на экран производится с помощью нескольких скриптов расположенных в папке scripts, но может быть расположено согласно вашего желания в любом месте, главное прописать правильные пути к скриптам.
Для запуска lua-скриптов в conkyrc, выше слова TEXT добавляем строки
lua_load ~/conky_20.03.2011/scripts/main.lua
lua_draw_hook_pre conky_main
Первая строка указывает на место хранения скрипта, а вторая запускает скрипт.
Скрипт main.lua содержит все основные данные необходимые для вывода. Рассмотрим что в нём находится.
Так как в скриптах используются команды языка cairo и также необходимо забирать данные из папки /tmp, первые строки скрипта указывает конькам, что это необходимо учитывать
require 'cairo'
require 'imlib2'
Строка
usrhome = os.getenv("HOME")
позволяет запускать данные коньки на любом компьютере, т.е. нет необходимости редактировать скрипты изменяя название домашней директории, всё будет происходить автоматически.
Строка
color = 0xffffff
задает значение цвета, в данном скрипте цвет шрифта, сразу для всех выводимых значений
Согласно программе conky возможен запуск только двух lua-скриптов, для запуска более двух lua-скриптов можно использовать такой способ
dofile (usrhome .. "/conky_20.03.2011/scripts/function_draw_image.lua")
dofile (usrhome .. "/conky_20.03.2011/scripts/simple_text.lua")
Эти строки сообщают программе, что необходимо использовать ещё два lua-скрипта расположенных по соответствующим адресам.
Далее расположена сама функция которая задает размеры, шрифт, цвет всем выводимым текстам и запускает скрипты вывода текстов и изображений
Объясню, что означают следующие строки на примере первого блока данных
{
text = conky_parse("${exec sed -n '1p' /tmp/weathertext}°C"),
x = 85,
y = 45,
font_size = 24,
bold = true,
h_align = "c",
colour = color,
},
Первая строка задает значение переменной text. Это значение забирается из первой строки файла /tmp/weathertext
Далее следуют:
- координаты, куда будет выведен этот текст
- размер шрифта
- "жирный" шрифт
- координаты соответствуют середине текста (центровка текста)
- цвет шрифта
Второй блок выводит данные о давлении, но так как мне привычней видеть давление в миллиметрах ртутного столба, то полученные данные в миллибарах переводятся в мм.рт.ст делением на 1.33322
Третий блок выводит направление ветра
Четвёртый - скорость ветра, переведённая в м/сек
Пятая - влажность в процентах
Далее следует обязательный блок необходимый для работы срипта
Проверяем, существует ли окно conky
if conky_window==nil then return end
Забираем данные об окне conky
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
Ну и наконец строки запускающие скрипт вывода иконок погоды и скрипт вывода текста. Можно было всё поместить в один скрипт, но мне кажется, что имея скрипты, выполняющие разные функции, легче их редактировать, улучшать, заменять и т.д. и т.п. Но это моё личное мнение.
Скрипт вывода иконок погоды запускается следующими строками
cr = cairo_create (cs)
draw_image_rect(cr, 7, 10, 120, "weather")
cairo_destroy(cr)
Здесь первая строка
cr = cairo_create (cs)
"говорит" программе, что необходимо в окне conky
Вторая строка
draw_image_rect(cr, 7, 10, 120, "weather")
дает команду запустить функцию с названием draw_image_rect которая выведет в окно conky в позицию с координатами x=7, y=10, размером 100 пикселей картинку с названием weather
Третья строка закрывает окно conky
Скрипт вывода текста немного сложнее
for i,v in pairs(weather_settings) do
cr = cairo_create (cs)
display_text(v)
cairo_destroy(cr)
end
cr = cairo_create (cs)
display_text(v)
cairo_destroy(cr)
end
Строка
for i,v in pairs(weather_settings) do
даёт команду считать из weather_settings один блок данных.
в окно conky cr = cairo_create (cs)
Запускается функция display_text(v) с полученными данными
Закрывается окно cairo_destroy(cr)
Если есть ещё блоки с данными в weather_settings то берется очередной блок с данными, иначе переход к следующим строкам скрипта end
Строка
cairo_surface_destroy(cs)
Закрывает окно конки для ввода изображений.
О выводе иконок погоды я расскажу в следующем посте, а о выводе текста уже было написано ранее.
Комментариев нет:
Отправить комментарий