Скрипт написан на основе работ любителя conky mrpeachy, за что ему большое спасибо.
Так как описание, скорее всего, займет много места, а читать и тем более писать, длинные тексты не всегда удобно, буду выкладывать частями, по мере написания.
Итак начнем
ВНИМАНИЕ: для забора данных из сети должна быть установлена программа curl, она есть во всех репозитариях.
Для начала через гугл или другую поисковую систему ищем сайт с прогнозом нашего местоположения.
К примеру мне необходимо вывести в окно конки текущую погоду и прогноз на несколько суток для города Павлограда, что находится в Украине.
В окне поиска пишу
погода в Павлограде, Украина
Выбираю сайт, мне понравился сайт www.weatherreports.com, так как он открылся с необходимыми мне данными, сохраняю адрес этой страницы, для Павлограда он такой
http://www.weatherreports.com/Pavlograd,_Ukraine?units=c
Начинаем писать программу. Для начала заголовок, что впрочем не обязательно, но я напишу
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
Далее, как всегда пишем
require "cairo"
и создаём ссылку на понравившейся нам сайт
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
ну и заодно время через которое будут обновляться данные
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
Теперь пишем функцию, которая будет забирать погоду с сайта и готовить данные к выводу на экран
function conky_forecast ()
end
Я всегда, начиная писать какую нибудь функцию, пропускаю несколько строк и пишу закрывающий функцию end, чтобы не забыть. Получилась функция которая ничего не делает. Сохраняем функцию в любое, на ваш выбор место, обозвав её например forecast.lua и даём скрипту права на исполнение. Вписываем в свой любимый conkyrc строки, выше слова TEXT
lua_load ~/путь_до_скрипта/forecast.lua
lua_draw_hook_pre forecast
Это необходимо сделать для того чтобы иметь возможность запустить программу. Правда если её запустить в Терминале в таком виде, то ничего не должно произойти. Если при запуске вылетают ошибки, значит, или неправильный путь к скрипту, или нет прав на исполнение. Ниже слова TEXT должна быть хотя бы одна пустая строка.
Так выглядит скрипт на данный момент
-- ===========================================
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
require "cairo"
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
function conky_forecast ()
end
-- ==============================================
Нам необходимо, чтобы через определённое время программа забирала данные о погоде с сайта. В классических conky это возможно сделать с помощью команды
execi 1800 (команда)
НО эта команда нагружает процессор, и ещё одно НО, мы пишем на lua.
Поэтому ниже названия функции пишем команды для таймера, который будет отсчитывать секунды
-- устанавливаем таймер обновления данных с сайта
local updates = tonumber(conky_parse('${updates}'))
local timer = (updates %secs) + 1
if timer == 1 or updates == 0 then
end
Первая строка забирает данные об обновлении из conkyrc, у меня всегда время обновления 1 секунда. Если время обновления сделать меньше, то повышается нагрузка на процессор, а если больше, то вывод секунд выводится некорректно.
Вторая строка, сам таймер, учитывающий каждое обновление conky, то есть количество прошедших секунд. Знак процента % указывает до какого момента считать, а secs - переменная которой мы выше присвоили значение 1800. При достижении 1800 секунд счетчик сбрасывается на 0.
Третья строка сравнивает полученное значение и если значения совпадают, то запускаются ниже стоящие программы. Остановкой служит значение end.
Так как описание, скорее всего, займет много места, а читать и тем более писать, длинные тексты не всегда удобно, буду выкладывать частями, по мере написания.
Итак начнем
ВНИМАНИЕ: для забора данных из сети должна быть установлена программа curl, она есть во всех репозитариях.
Для начала через гугл или другую поисковую систему ищем сайт с прогнозом нашего местоположения.
К примеру мне необходимо вывести в окно конки текущую погоду и прогноз на несколько суток для города Павлограда, что находится в Украине.
В окне поиска пишу
погода в Павлограде, Украина
Выбираю сайт, мне понравился сайт www.weatherreports.com, так как он открылся с необходимыми мне данными, сохраняю адрес этой страницы, для Павлограда он такой
http://www.weatherreports.com/Pavlograd,_Ukraine?units=c
Начинаем писать программу. Для начала заголовок, что впрочем не обязательно, но я напишу
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
Далее, как всегда пишем
require "cairo"
и создаём ссылку на понравившейся нам сайт
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
ну и заодно время через которое будут обновляться данные
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
Теперь пишем функцию, которая будет забирать погоду с сайта и готовить данные к выводу на экран
function conky_forecast ()
end
Я всегда, начиная писать какую нибудь функцию, пропускаю несколько строк и пишу закрывающий функцию end, чтобы не забыть. Получилась функция которая ничего не делает. Сохраняем функцию в любое, на ваш выбор место, обозвав её например forecast.lua и даём скрипту права на исполнение. Вписываем в свой любимый conkyrc строки, выше слова TEXT
lua_load ~/путь_до_скрипта/forecast.lua
lua_draw_hook_pre forecast
Это необходимо сделать для того чтобы иметь возможность запустить программу. Правда если её запустить в Терминале в таком виде, то ничего не должно произойти. Если при запуске вылетают ошибки, значит, или неправильный путь к скрипту, или нет прав на исполнение. Ниже слова TEXT должна быть хотя бы одна пустая строка.
Так выглядит скрипт на данный момент
-- ===========================================
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
require "cairo"
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
function conky_forecast ()
end
-- ==============================================
Нам необходимо, чтобы через определённое время программа забирала данные о погоде с сайта. В классических conky это возможно сделать с помощью команды
execi 1800 (команда)
НО эта команда нагружает процессор, и ещё одно НО, мы пишем на lua.
Поэтому ниже названия функции пишем команды для таймера, который будет отсчитывать секунды
-- устанавливаем таймер обновления данных с сайта
local updates = tonumber(conky_parse('${updates}'))
local timer = (updates %secs) + 1
if timer == 1 or updates == 0 then
end
Первая строка забирает данные об обновлении из conkyrc, у меня всегда время обновления 1 секунда. Если время обновления сделать меньше, то повышается нагрузка на процессор, а если больше, то вывод секунд выводится некорректно.
Вторая строка, сам таймер, учитывающий каждое обновление conky, то есть количество прошедших секунд. Знак процента % указывает до какого момента считать, а secs - переменная которой мы выше присвоили значение 1800. При достижении 1800 секунд счетчик сбрасывается на 0.
Третья строка сравнивает полученное значение и если значения совпадают, то запускаются ниже стоящие программы. Остановкой служит значение end.
Теперь наша программа выглядит так
-- ===========================================
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
require "cairo"
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
function conky_forecast ()
-- устанавливаем таймер обновления данных с сайта
local updates = tonumber(conky_parse('${updates}'))
local timer = (updates %secs) + 1
if timer == 1 or updates == 0 then
end
end
-- ==============================================
Всё готово для полученния данных с сайта
После строки
if timer == 1 or updates == 0 then
вписываем команду, которая заберет данные с сайта и поместит их в домашнюю директорию в файл pogoda. Эта команда нужна только для первого получения данных с сайта, ну и возможно потребуется, если сайт изменит формат вывода данных. Такой случай у меня был и в моём скрипте такая команда просто закомментирована, на всякий пожарный случай. И так пишем
-- для проверки загоняем в /home/pogoda
os.execute("curl --max-time 60 '"..web.."' | sed 's/%//g' >> ~/pogoda")
os.execute - очень универсальная команда. В данном случае она запускает строку написанную на bash. Её можно использовать везде, в программах написанных на lua, для запуска программ, плеера и т.д. и т.п.
curl - забирает данные, sed - фильтрует, и всё это загоняется в домашнюю директорию в файл pogoda
Полученный файл нужен для поиска данных на странице сайта.
Так выглядит программа после последних изменений.
-- ====================================================
--[[ forecast.lua
скрипт забирает прогноз погоды и обрабатывает его для вывода на экран
]]
require "cairo"
-- адрес сайта
web = "http://www.weatherreports.com/Pavlograd,_Ukraine?units=c"
-- время обновления прогноза погоды
secs = 1800 -- обновление каждые 30 минут ( в секундах )
function conky_forecast ()
-- устанавливаем таймер обновления данных с сайта
local updates = tonumber(conky_parse('${updates}'))
local timer = (updates %secs) + 1
if timer == 1 or updates == 0 then
-- для проверки загоняем в /tmp
os.execute("curl --max-time 60 '"..web.."' | sed 's/%//g' >> /tmp/pogoda &")
end
end
-- ==============================================
Итак скрипт готов, права на исполнение скрипту даны, в conkyrc прописан, ЗАПУСКАЕМ В ТЕРМИНАЛЕ
conky -c ~/путь-до-файла/conkyrc
В терминале появится примерно такое сообщение
olgmen@olgmen:~$ conky -c ~/proba/proba_conkyrc
Conky: desktop window (15a) is root window
Conky: window type - normal
Conky: drawing to created window (0x2c00001)
Conky: drawing to double buffer
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 49906 100 49906 0 0 34546 0 0:00:01 0:00:01 --:--:-- 47940
и в домашней директории появился файл pogoda. Это значит, что данные с сайта получены, скрипт работает.
На этом я остановлюсь. Продолжение следует.
не могу разобраться что не так.
ОтветитьУдалить~$ conky -c ~/.conkyrc
Conky: desktop window (1c00095) is subwindow of root window (14e)
Conky: window type - override
Conky: drawing to created window (0x4200001)
Conky: drawing to double buffer
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16502 0 16502 0 0 4562 0 --:--:-- 0:00:03 --:--:-- 10849
файл pogoda создается, но не полный похоже. curl не хочет качать с сайта http://tolmachevo.nuipogoda.ru/forecast7.html
подскажи, пожалуйста, что делать