From 1dfe0b4d46a1b0ab587f947c85c520821323cff2 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 28 Apr 2022 20:07:11 +0300 Subject: [PATCH] add currency-ru widget --- ru/currency-ru-widget.lua | 400 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 ru/currency-ru-widget.lua diff --git a/ru/currency-ru-widget.lua b/ru/currency-ru-widget.lua new file mode 100644 index 0000000..bada1f7 --- /dev/null +++ b/ru/currency-ru-widget.lua @@ -0,0 +1,400 @@ +-- name = "Курсы валют ЦБ" +-- description = "Виджет отображает курсы валют Центрального Банка России" +-- data_source = "https://www.cbr.ru/" +-- type = "widget" +-- lang = "ru" +-- author = "Andrey Gavrilov" +-- version = "1.0" + +local cur = "USD" +local base_cur = "RUB" +local nominal = 1 +local cur_id = "R01235" +local idx = 0 +local history = "" + +function on_alarm() + get_rates() +end + +function on_click() + http:get("https://www.cbr.ru/scripts/XML_daily.asp","today") +end + +function on_long_click() + if history == "" then + return + end + ui:show_dialog("История курсов ЦБ\n"..nominal.." "..cur.." / "..base_cur,history) +end + +function on_settings() + local xml = require "xml" + local t = xml:parse(currencies) + local names = {} + for i,v in ipairs(t.Valuta.Item) do + table.insert(names,v.Name:value()) + if v["@ID"] == cur_id then + idx = i + end + end + ui:show_radio_dialog("Выберите валюту",names,idx) +end + +function on_dialog_action(data) + if data == -1 then + return + end + local xml = require "xml" + local t = xml:parse(currencies) + cur = t.Valuta.Item[data].ISO_Char_Code:value() + cur_id = t.Valuta.Item[data]["@ID"] + idx = data + get_rates() +end + +function on_network_result_today(result,error) + local xml = require "xml" + local t = xml:parse(result) + local today = "" + local date_today = t.ValCurs["@Date"] + for i,v in ipairs(t.ValCurs.Valute) do + if i>1 then + today = today.."
" + end + today = today..v.Nominal:value().." "..v.CharCode:value().." = "..v.Value:value():replace(",",".").." "..base_cur + end + ui:show_dialog("Курсы валют ЦБ\n"..date_today,today) +end + +function on_network_result_history(result,error) + history = "" + local color = ui:get_colors() + local equals = " = " + local xml = require "xml" + local t = xml:parse(result) + if t.ValCurs.Record == nil then + ui:show_text("Для валюты "..cur.." не заданы курсы") + return + end + local points = {} + local k=#t.ValCurs.Record + local dd = t.ValCurs.Record[1]["@Date"]:split(".") + nominal = t.ValCurs.Record[k].Nominal:value() + local tp = os.time{day=dd[1],month=dd[2],year=dd[3]} - 24*60*60 + for i,v in ipairs(t.ValCurs.Record) do + dd = v["@Date"]:split(".") + local tm = os.time{day=dd[1],month=dd[2],year=dd[3]} + for tt=tp+24*60*60, tm, 24*60*60 do + local point = {} + table.insert(point,tt*1000) + table.insert(point,v.Value:value():replace(",",".")/v.Nominal:value()*nominal) + table.insert(points,point) + end + tp = tm + history = v["@Date"]..": "..nominal.." "..cur.." = "..v.Value:value():replace(",",".")/v.Nominal:value()*nominal.." "..base_cur..history + if i<#t.ValCurs.Record then + history = "
"..history + end + end + local ch = round((t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal-t.ValCurs.Record[k-1].Value:value():replace(",",".")/t.ValCurs.Record[k-1].Nominal:value()*nominal)/t.ValCurs.Record[k-1].Value:value():replace(",",".")*t.ValCurs.Record[k-1].Nominal:value()/nominal*100,2) + ui:show_chart(points,"x:date y:number",t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal.." "..base_cur,true,nominal.." "..cur..equals..t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal.." "..base_cur.." "..get_formatted_change_text(ch)) +end + +function get_rates() + local date2 = os.date("%d/%m/%Y") + local dd = date2:split("/") + local t = os.time{day=dd[1],month=dd[2],year=dd[3]}-30*24*60*60 + local date1 = os.date("%d/%m/%Y",t) + local str = "https://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="..date1.."&date_req2="..date2.."&VAL_NM_RQ="..cur_id + http:get(str,"history") +end + +function get_formatted_change_text(change) + local color = ui:get_colors() + if change > 0 then + return " +"..change.."%" + elseif change < 0 then + return " "..change.."%" + else + return " "..change.."%" + end +end + +currencies = [[ + + + +Австралийский доллар +Australian Dollar +1 +R01010 +36 +AUD + + +Азербайджанский манат +Azerbaijan Manat +1 +R01020 +944 +AZN + + +Фунт стерлингов Соединенного королевства +British Pound Sterling +1 +R01035 +826 +GBP + + +Армянский драм +Armenia Dram +1000 +R01060 +51 +AMD + + +Белорусский рубль +Belarussian Ruble +1 +R01090 +933 +BYN + + +Болгарский лев +Bulgarian lev +1 +R01100 +975 +BGN + + +Бразильский реал +Brazil Real +1 +R01115 +986 +BRL + + +Венгерский форинт +Hungarian Forint +100 +R01135 +348 +HUF + + +Гонконгский доллар +Hong Kong Dollar +10 +R01200 +344 +HKD + + +Датская крона +Danish Krone +10 +R01215 +208 +DKK + + +Доллар США +US Dollar +1 +R01235 +840 +USD + + +Евро +Euro +1 +R01239 +978 +EUR + + +Индийская рупия +Indian Rupee +100 +R01270 +356 +INR + + +Казахстанский тенге +Kazakhstan Tenge +100 +R01335 +398 +KZT + + +Канадский доллар +Canadian Dollar +1 +R01350 +124 +CAD + + +Киргизский сом +Kyrgyzstan Som +100 +R01370 +417 +KGS + + +Китайский юань +China Yuan +10 +R01375 +156 +CNY + + +Молдавский лей +Moldova Lei +10 +R01500 +498 +MDL + + +Норвежская крона +Norwegian Krone +10 +R01535 +578 +NOK + + +Польский злотый +Polish Zloty +1 +R01565 +985 +PLN + + +Румынский лей +Romanian Leu +10 +R01585 +946 +RON + + +СДР (специальные права заимствования) +SDR +1 +R01589 +960 +XDR + + +Сингапурский доллар +Singapore Dollar +1 +R01625 +702 +SGD + + +Таджикский сомони +Tajikistan Ruble +10 +R01670 +972 +TJS + + +Турецкая лира +Turkish Lira +1 +R01700 +949 +TRY + + +Новый туркменский манат +New Turkmenistan Manat +1 +R01710 +934 +TMT + + +Узбекский сум +Uzbekistan Sum +1000 +R01717 +860 +UZS + + +Украинская гривна +Ukrainian Hryvnia +10 +R01720 +980 +UAH + + +Чешская крона +Czech Koruna +10 +R01760 +203 +CZK + + +Шведская крона +Swedish Krona +10 +R01770 +752 +SEK + + +Швейцарский франк +Swiss Franc +1 +R01775 +756 +CHF + + +Южноафриканский рэнд +S.African Rand +10 +R01810 +710 +ZAR + + +Вон Республики Корея +South Korean Won +1000 +R01815 +410 +KRW + + +Японская иена +Japanese Yen +100 +R01820 +392 +JPY + + +]] \ No newline at end of file