From 1b4cf9ecbc666327fa6c92215d7c03d886a5a782 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 30 Apr 2022 15:22:48 +0300 Subject: [PATCH] add currency-ru search widget --- community/currency-cbr-search.lua | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 community/currency-cbr-search.lua diff --git a/community/currency-cbr-search.lua b/community/currency-cbr-search.lua new file mode 100644 index 0000000..6b6ec6e --- /dev/null +++ b/community/currency-cbr-search.lua @@ -0,0 +1,68 @@ +-- 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?)$") + 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:copy_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({"Нет данных по валюте "..cur},{red}) +end + +function on_long_click() + system:copy_to_clipboard(val) + return true +end \ No newline at end of file