суббота, 21 апреля 2012 г.

О том как написать программу на lua для приема сводок погоды с любого сайта. Часть 5


Вот наконец и добрался до последней части или о том, как вывести иконки погоды.


Для вывода иконок используем функцию

function display_images(t)

-- забираем картинку

image = (t.image)

-- создаём имидж изображения

local image_bg = cairo_image_surface_create_from_png (image)

-- забираем данные о ширине и высоте изображения из образа

local w_image = cairo_image_surface_get_width (image_bg)
local h_image = cairo_image_surface_get_height (image_bg)

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

cairo_translate (cr, t.x, t.y)

-- масштабтруем изображение

cairo_scale (cr, t.width/w_image, t.height/h_image)

-- выводим изображение

cairo_set_source_surface (cr, image_bg, 0, 0)
cairo_paint (cr)
cairo_surface_destroy (image_bg)
end

Помещаем функцию в самый конец скрипта.

Далее необходимо взять набор иконок, я использую иконки от conkyForecast. Можно в сети найти любые иконки, главное, что бы они были в формате png.
Иконки помещаем в отдельную папку, в моем случае иконки находятся в папке ~/weathericons. Поэтому делаем ссылку на место хранения иконок

-- определяем домашнюю директорию, для возможности работы под любым пользователем
usrhome = os.getenv("HOME")
-- место хранения иконок погоды, для своих иконок измените путь к папке с иконками
weathericons = usrhome .. "/weathericons/"


В скрипте создаем таблицу соответствия названий получаемых с сайта иконок и иконок которые мы имеем. Эта таблица имеет такой вид

wimage = {
clear_dl = "32", -- Clear day
clear_ds = "32", -- Clear day
clear_nl = "31", -- Clear night
sunny_dl = "32", -- Clear day
sunny_ds = "32", -- Clear day
cloudy_dl = "26", -- Cloudy day
cloudy_ds = "26", -- Cloudy day
snow_dl = "16", -- Snow day
snow_ds = "16", -- Snow day
clear_nl = "31", -- Clear night
partly_clear_dl = "30", -- Partly Cloudy day
partly_clear_ds = "30", -- Partly Cloudy day
partly_clear_nl = "27", -- Partly Cloudy day
mostly_cloudy_dl = "28",  -- Mostly Cloudy
mostly_cloudy_nl = "28",  -- Mostly Cloudy
mostly_cloudy_ds = "28",  -- Mostly Cloudy
mostly_clear_dl = "28",  -- Mostly Cloudy
}

Это конечно не вся таблица, так как полный список названий получаемых с сайта иконок мне не известно. Просто при появлении новых названий их надо добавить в таблицу.

Строки, обрабатывающие названия иконок заменяем на такие

-- иконка прогноза погоды
local s,f,t = string.find(allweather, "weather_icons/([%a%p]*).gif", start)
if t ~= nil then
-- перекодировка иконок прогноза погоды
table.insert(weather_icon, weathericons .. wimage[t] .. ".png")
else
table.insert(weather_icon, weathericons .. "25.png")
end
-- иконка погоды
local s,f,t = string.find(nowweather, "weather_icons/([%a%p]*).gif\" width")
if t ~= nil then
now["weather_icon"] = weathericons .. wimage[t] .. ".png"
else
now["weather_icon"] = weathericons .. "25.png"
end

Окончательный вариант вместе с иконками можно взять здесь http://dl.dropbox.com/u/22038871/weater.tar.gz
А так всё это выглядит



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

Отправить комментарий