71 lines
1.6 KiB
Lua
71 lines
1.6 KiB
Lua
-- name = "Курс валют ЦБ"
|
||
-- description = "Cкрипт отображает курс валюты ЦБ России на заданную дату (usd 30 3 22)"
|
||
-- data_source = "https://www.cbr.ru/"
|
||
-- type = "search"
|
||
-- lang = "ru"
|
||
-- author = "Andrey Gavrilov"
|
||
-- version = "1.0"
|
||
|
||
-- modules
|
||
local xml = require "xml"
|
||
local md_color = require "md_colors"
|
||
|
||
-- constants
|
||
local red = md_colors.red_500
|
||
|
||
-- variables
|
||
local cur = ""
|
||
local dat = ""
|
||
local val = 0
|
||
|
||
function on_search(inp)
|
||
val = 0
|
||
local c,d,m,y = inp:match("^(%a%a%a)%s?(%d?%d?)%s?(%d?%d?)%s?(%d?%d?%d?%d?)$")
|
||
if c == nil then return end
|
||
|
||
cur = c:upper()
|
||
local t = os.date("*t")
|
||
if d == "" then
|
||
d = t.day
|
||
end
|
||
if m == "" then
|
||
m = t.month
|
||
end
|
||
if y == "" then
|
||
y = t.year
|
||
elseif y%100 > 95 then
|
||
y = 1900 + y%100
|
||
else
|
||
y = 2000 + y%100
|
||
end
|
||
dat = os.date("%d.%m.%Y",os.time{day=d,month=m,year=y})
|
||
search:show({"Курс "..cur.." "..dat},{red})
|
||
end
|
||
|
||
function on_click()
|
||
if val == 0 then
|
||
http:get("https://www.cbr.ru/scripts/XML_daily.asp?date_req="..dat:replace("%.","/"))
|
||
return false
|
||
else
|
||
system:to_clipboard(val)
|
||
return true
|
||
end
|
||
end
|
||
|
||
function on_network_result(res)
|
||
local t = xml:parse(res)
|
||
for i,v in ipairs(t.ValCurs.Valute) do
|
||
if v.CharCode:value() == cur then
|
||
search:show({t.ValCurs["@Date"],v.Nominal:value().." "..v.CharCode:value().." = "..v.Value:value():replace(",",".").." RUB"},{red,red})
|
||
val = v.Value:value()
|
||
return
|
||
end
|
||
end
|
||
search:show_buttons({"Нет данных по валюте "..cur},{red})
|
||
end
|
||
|
||
function on_long_click()
|
||
system:to_clipboard(val)
|
||
return true
|
||
end
|