Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Сетевые скрипты [PtokaX] _ Курсы Валют Цб

Автор: Fodin 6.8.2008, 3:34

Только что дописал. У меня вроде бы работает. Тестируйте.
Поскольку не нашел, когда обновляют курсы, пока обновляется по интервалу. Потом, наверное, как соберу статистику, допишу, чтобы исключались интервалы, когда обновления быть не может.
ЗЫ: Библиотек pxluasocket опять не прикладываю.
Обнаружил баг неприятный. Залил новую версию.

 Currency.lua ( 5.08 килобайт ) : 802
 

Автор: Al-j® 28.8.2008, 1:50

Цитата(Fodin @ 6.8.2008, 5:34) *
Только что дописал. У меня вроде бы работает. Тестируйте.
Поскольку не нашел, когда обновляют курсы, пока обновляется по интервалу. Потом, наверное, как соберу статистику, допишу, чтобы исключались интервалы, когда обновления быть не может.
ЗЫ: Библиотек pxluasocket опять не прикладываю.
Обнаружил баг неприятный. Залил новую версию.


Работает surrender.gif

Автор: СТУДЕНТ 5.9.2008, 17:30

Спасибо за скрипт big_smile.gif

Автор: Nissan_GT 11.12.2008, 23:26

Плиз сделайте под API 1

Автор: колбаскин 26.12.2008, 22:54

как для Украины смотреть? может кто знает откуда вытянуть можно?

Автор: Setuper 26.12.2008, 23:01

А что на Украине уже не заходит на русские сайты?

Автор: колбаскин 27.12.2008, 2:51

Цитата(Setuper @ 26.12.2008, 22:01) *
А что на Украине уже не заходит на русские сайты?


да нет...просто зачем нам ваш курс нацбанка....
у нас все гораздо хуже чем у вас....

поэтому хотелось бы смотреть на Украинский!

Автор: Николай 6.1.2009, 15:42

Народ плз переделайте этот скрипт так чтоб он в мотд выводил курсы валют евро и доллар =) (если это возможно)

Автор: Setuper 7.1.2009, 11:32

В какой мотд? Прямо в основной мотд хаба? Не легче ли сделать свой мотд?

Код
function UserConnected(tUser)
  Core.SendToUser(tUser,"сообщение")
end

Автор: колбаскин 7.1.2009, 17:03

Тут есть кто-то с Украины? как сделать украинский курс?

Автор: Николай 8.1.2009, 23:05

Цитата(Setuper @ 7.1.2009, 11:32) *
В какой мотд? Прямо в основной мотд хаба? Не легче ли сделать свой мотд?
Код
function UserConnected(tUser)
  Core.SendToUser(tUser,"сообщение")
end


У мя есть мотд(основной) А как сделать чтоб евро и долар выводились при конекти юзера на хаб сразу после мотд)

Автор: Infinity_Love 16.3.2009, 15:33

Здравствуйте, lua-masters, сделайте, пожалуйста, курс для Украины с НБУ. XML берём вот отсюда http://mydc.ru/r/?http://www.bank-ua.com/export/currrate.xml Пробовал менять просто адрес, но не работает, в укр. XML ещё есть дата, но коды такие же.

Автор: Санёк 16.3.2009, 23:57

И белорусский курс тоже как сделать ? big_smile.gif

Автор: li4nost 17.3.2009, 4:20

и я не против белорусского big_smile.gif

Автор: Wariner 17.3.2009, 8:03

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

Автор: Санёк 17.3.2009, 14:51

li4nost вот можно попробывать с сайта Национального банка Беларуси http://mydc.ru/r/?http://www.nbrb.by/

Автор: li4nost 17.3.2009, 18:28

Wariner

вот смотри, я нашел http://mydc.ru/r/?http://www.nbrb.by/statistics/rates/ratesDaily.asp - как ее впихнуть в скрипт?

Автор: Wariner 17.3.2009, 18:47

мне не понятен вопрос.... в чём проблема?!

Код
sAddr = "http://www.nbrb.by/statistics/rates/ratesDaily.asp"

Автор: Setuper 17.3.2009, 18:57

Проблема в парсинге данной ссылки.

Автор: li4nost 17.3.2009, 23:06

да да.
по ссылке из скрипты идут валюты - их коды и т.п.
а здесь просто страница - так не катит - я пробовал

Автор: comua 21.3.2009, 6:34

Переделал парсинг строк спецом для курса валют НБУ. Для меня это все еще на грани фантастики и на уровен инстинкта. Запарился приводить отображение в порядок, удалил следующие строчки, так как выравнения текста на выходе у меня нет и я решил не резать названия валют. И всеравно их надо менять на аналоги

Код
fd=string.gsub(fd,"Соединенного королевства", "")
fd=string.gsub(fd,"%(специальные права заимствования%)", "")
fd=string.gsub(fd,"Жэньминьби", "")

В итоге выводит в окно чата что-то типа
Цитата
•••••••••••••• Курсы валют НБУ на 23.03.2009 ••••••••••••••

USD 100 доларів США = 770 грн. +0
EUR 100 ЄВРО = 1043.273 грн. +0
RUB 10 російських рублів = 2.3038 грн. +0

•••••••••••••• Курсы валют НБУ на 23.03.2009 ••••••••••••••
Вообщем главная задача выполнена, красоту уже сами наводите. Для добавления еще каких-то валют, смотрите список доступных "Цифровых кодов" http://mydc.ru/r/?http://bank-ua.com/index.php?page=spr_kurs и добавляйте в строчке
Код
Currency={840, 978, 643}


 kurs.nbu.lua ( 4.71 килобайт ) : 41
 

Автор: Санёк 21.3.2009, 21:04

comua, супер.
Но вот кто бы для бел. валюты сделал ? unhappy.gif

Автор: comua 22.3.2009, 0:48

Кто разбирается, подскажите пожалуйста один момент.

вот пирмер для курса рубля

есть строчка в полученом XML

Код
<ValCurs Date="21.03.2009" name="Foreign Currency Market">

за парсинг этой строчки отвечает этот код в скрипте
Код
_,_,Date.day,Date.month,Date.year=string.find(fd,"Date=\"(%d%d)%.(%d%d)%.(%d%d%d%d)")


теперь пытаюсь переделать для белорусов

строчка с датой в XML в таком вот виде
Код
<DailyExRates Date="3/23/2009">

изменяю часть кода вот так
Код
_,_,Date.month,Date.day,Date.year=string.find(fd,"Date=\"(%d%d)%/(%d%d)%/(%d%d%d%d)")

строка не парсится так как надо. Меняю на
Код
_,_,Date.month,Date.day,Date.year=string.find(fd,"Date=\"(%d)%/(%d%d)%/(%d%d%d%d)")

и все работает. Но это будет работать пока месяц не больше 9-ти. Как это обойти?

Автор: Setuper 22.3.2009, 1:00

символ / не нуждается в экранировании.

Код
Date.month,Date.day,Date.year=string.match(fd, "Date=\"(%d+)/(%d+)/(%d+)")

Автор: comua 22.3.2009, 1:22

Я уже разобрался что ошибка была не в символе разделителе, но благодарю за пример, очень помог. В частности вот это "%d+". Теперь все, держите и для белоруского рубля информер.

 kurs.bel.lua ( 5.15 килобайт ) : 53
 

Автор: li4nost 22.3.2009, 3:04

ДА ТЫ ПРОСТО МЕГАЗВЕРЬ!
big_smile.gif
все отлично работает! (пока) big_smile.gif
спасибо огромное!!!

Автор: Санёк 22.3.2009, 13:11

Цитата(comua @ 22.3.2009, 0:22) *
Я уже разобрался что ошибка была не в символе разделителе, но благодарю за пример, очень помог. В частности вот это "%d+". Теперь все, держите и для белоруского рубля информер.

Спасибо!! Работает!
Вот только:




У меня как всегда куча вопросов и пожеланий по скрипту ))

Курс евро получается немного смещённым!
Как сделать что бы по комманде курсы отсылались ботом приватной мессагой?
Как убрать подменю "информатор" ? т.е. что бы сразу была менюшка "Курсы валют"
Как сделать что бы курс валют периодически отсылался в общий чат и был видим всем пользователям (вообщем наподобие скрипта погоды с rp5.ru)

заранее огромное спс. за помощь big_smile.gif

Автор: comua 23.3.2009, 4:44

Выровнять никак не получится, все упирается в шрифт, он у кадого клиента может быть разным. Я вообще привел все к такому вот виду

Цитата
•••••••••••••• Курсы валют НБУ на 23.03.2009 ••••••••••••••

USD 100 доларів США = 770 грн. +0
EUR 100 ЄВРО = 1043.273 грн. +0
RUB 10 російських рублів = 2.3038 грн. +0

•••••••••••••• Курсы валют НБУ на 23.03.2009 ••••••••••••••

по привату. думаю, надо изменить строчки
Код
Core.SendToUser(user, "<"..sBotName.."> Данные устарели, запрашиваю сервер...")
Core.SendToUser(user, "<"..sBotName.."> \n"..sMsg)

на
Код
Core.SendPmToUser(user, "<"..sBotName..">", "Данные устарели, запрашиваю сервер...")
Core.SendPmToUser(user, "<"..sBotName..">", "\n"..sMsg)

по поводу менюхи, надо менять
Код
Core.SendToUser(user, "$UserCommand 1 3 "..sMainMenu.."Курсы валют ЦБ $<%[mynick]> !курс".."|")

на
Код
Core.SendToUser(user, "$UserCommand 1 3 Курсы валют ЦБ $<%[mynick]> !курс".."|")

и самое интересное - таймер. Возможно сработает (взял за основу другой скрипт)

после строчки
Код
Currency={840, 978, 392, ............

добавляем вот это
Код
timer = 60 -- в минутах
timeron = 1 -- включить - 1, выключить - 0


А после строк
Код
OpConnected = UserConnected
RegConnected = UserConnected

надо добавить
Код
function OnStartup()
    if (timeron = 1) then
        tmr = TmrMan.AddTimer (timer*60*1000)
    end
end

function OnTimer(tmr)
    local difftime = os.difftime(os.time(), iLastTime)
        if (difftime > iExpireTime) then
            table.insert(tReqUsers, user)
            Core.SendToAll("<"..sBotName.."> Данные устарели, запрашиваю сервер...")
            GetInfo()
            iLastTime = os.time()
        else
            Core.SendToAll("<"..sBotName.."> \n"..sMsg)
        end
end
Правильную работу не гарантирую, хотелось бы увидеть комментарии более продвинутых пользователей. Просто сам недавно начал разбираться в синтаксисе и принципах.

зы: на этом форуме есть возможность скрыть часть сообщения под спойлер, чтобы не загромождать?

Автор: Санёк 24.3.2009, 17:52


Менюшка действительно изменяется как я хотел, но в общий чат проходит лишь !курсбел и ничего не происходит

Автор: Wariner 24.3.2009, 19:10

ошибки смотри!!!

Автор: whuru 11.4.2009, 22:19

Как реализовать связь птохи с интернетом через прокси, чтобы она знала?
Хаб в локальной сети. Сервер, на котором хаб имеет связь с интернетом через прокси.

Спасибо.

Автор: Wariner 11.4.2009, 22:24

через прокси работать не будет!

Автор: lezvik 15.4.2009, 0:56

на первый апи не ожидаетса?

Автор: sergius 24.1.2010, 13:30

[13:28] Синтаксис Currency.lua:96: attempt to index field '?' (a nil value)

после запуска не выводит, делаешь второй раз вывести выводит 2 раза лол

Автор: bonch 13.3.2010, 13:40

Цитата(sergius @ 24.1.2010, 13:30) *
[13:28] Синтаксис Currency.lua:96: attempt to index field '?' (a nil value)

после запуска не выводит, делаешь второй раз вывести выводит 2 раза лол


Подтверждаю. PtokaX 0.4.1.2. Аналогичная ошибка вываливается и во второй и в третий-четвёртый раз...Рокировка скрипта вверх-вниз результата не даёт.

Автор: Nickolya 14.3.2010, 17:13

Решение проблемы с ошибкой:
1. Заменить два раза

Код
while string.find(fd,"<Value>") do
на
Код
while string.find(fd,"<Valute ID=\".-\">") do

2. Заменить
Код
                    sMsg=sMsg..val[i].CharCode.."\t"..val[i].Nominal.." "..val[i].Name..string.rep("\t",math.floor((MaxLen-string.len(val[i].Name)-string.len(val[i].Nominal)+1)/8+1))..val[i].Value.."\t"..((val[i].Diff<0) and "" or "+")..val[i].Diff.."\n"
                    if sMidChar~="" and x<table.getn(Currency) then sMsg = sMsg..string.rep(sMidChar,iMidChar).."\n" end
на
Код
                    if val[i] then
                        sMsg=sMsg..val[i].CharCode.."\t"..val[i].Nominal.." "..val[i].Name..string.rep("\t",math.floor((MaxLen-string.len(val[i].Name)-string.len(val[i].Nominal)+1)/8+1))..val[i].Value.."\t"..((val[i].Diff<0) and "" or "+")..val[i].Diff.."\n"
                        if sMidChar~="" and x<table.getn(Currency) then sMsg = sMsg..string.rep(sMidChar,iMidChar).."\n" end
                    end

Автор: bonch 14.3.2010, 20:28

Благодарствую. Работает. Осталось корректно увести "Данные устарели, запрашиваю сервер" и сам вывод информации в приват, ибо советы выше в других постах ни к чему, кроме ошибок, не приводят.

Автор: Nickolya 14.3.2010, 20:50

Чтобы убрать сообщение "Данные устарели, запрашиваю сервер..." удали строку

Код
Core.SendToUser(user, "<"..sBotName.."> Данные устарели, запрашиваю сервер...")


А чтобы выводить данные в приват замени
Код
Core.SendToUser(user, "<"..sBotName.."> \n"..sMsg)
на
Код
Core.SendPmToUser(user, sBotName, "\n"..sMsg)

Автор: bonch 14.3.2010, 21:15

Спасибо. Всё корректно.

Автор: Препод 1.4.2010, 9:40

scripts\Currency.lua:102: 'end' expected (to close 'for' at line 95) near 'else' вот такая ошибка после замены

Автор: Nickolya 1.4.2010, 13:03

Что на что менял? И можно приложить код того что у тебя вышло в виде вложения. При точной замене все работает как надо.

Автор: JackM 1.4.2010, 13:13

Такая же проблема

Код
/Currency.lua:91: attempt to perform arithmetic on field 'Value' (a nil value)

Исправлял лишь с этого поста
http://mydc.ru/topic245.html?view=findpost&p=28226
+ удалил
Код
Core.SendToUser(user, "<"..sBotName.."> Данные устарели, запрашиваю сервер...")


Все равно не пашет

Автор: Ольга 5.4.2010, 17:18

Тоже самое, что до что после замены. После попытки вывода курса валют.
Вылзит
[18:16] Синтаксис ...ers\Ольга\Desktop\Новая птаха\scripts\Currency3.lua:91: attempt to perform arithmetic on field 'Value' (a nil value)

Что делать, помогите, великие умы.

Автор: GASTROLER692 25.7.2010, 19:51

Все поменял в кодах как описал...Скрипт без ошибок заработал!PtokaX 0.4.1.2 .СПАСИБО!

Автор: OLGA 28.8.2010, 3:49

Привет мальчики. Помогите девушке. Переделайте пожалуйста скрипт вывода валют под птаху 0.3.6 в API1 из API2 и выложите его в архивчике со всем что для него надо и скажите куда потом что положить. Зарание всем вам огромное спасибо мои дорогие.

Автор: Артём 28.8.2010, 11:16

OLGA, big_smile.gif  Currency.rar ( 6.63 килобайт ) : 32
оба файла в папку scripts

Автор: OLGA 28.8.2010, 13:58

Огромное тебе спасибо. Если понадобятся ешё скрипты то я обязательно к тебе обращусь.

Автор: Invisible 28.8.2010, 15:49

Артём, Огромный Респект тебе))) Скрипт написан так, как я хотел =)

Автор: bonch 20.11.2010, 5:08

Одолело совсем...

В чат выходит !курс и проскакивает ошибка:
Синтаксис ...\PtokaX 0.4.1.2\scripts\Currency.lua:91: attempt to perform arithmetic on field 'Value' (a nil value)

Если ставить последним в списке, то ошибки нет, но вывод в чат !курс всё равно остаётся...
Скрипт из шапки с поправками из постов 37 и 39 отработал с марта без запинки. Описанные ошибки - дело последних двух дней, и непонятно, чем они могут быть вызваны...

Автор: Strannik 20.11.2010, 11:32

Все исправил работает спасибо Nickolya

 Currency.lua ( 4.55 килобайт ) : 42
 

Автор: bonch 20.11.2010, 13:40

Цитата(Strannik @ 20.11.2010, 11:32) *
Все исправил работает спасибо Nickolya



У данного варианта скрипта опытным путём обнаружена несовместимость с http://mydc.ru/topic1377.html?view=findpost&p=9981
Независимо от того, куда ты их поставишь - в начало или в конец списка, неважно - Курс валют работает только при выключенной Викторине. Теперь ошибка возникает в другой строке, но с тем же аргументом:
Синтаксис ...\PtokaX 0.4.1.2\scripts\Currency.lua:77: attempt to perform arithmetic on field 'Value' (a nil value)

Только Викторину отполировал... Очень жаль...

Автор: Nickolya 22.11.2010, 19:39

Очень странно, всё работает, в том числе с викториной в паре...
Попробуй у себя заменить в скрипте

Код
val[NumCode].Value
на
Код
(val[NumCode].Value or 0)

Если не выйдет - выкладывай свой вариант скрипта.

Автор: bonch 22.11.2010, 21:06

Вариант из 51 поста, после твоей замены теперь выдаёт:
Синтаксис ...\PtokaX 0.4.1.2\scripts\Currency.lua:77: attempt to perform arithmetic on a nil value
Ну и !курс в чате, как и было...

Уже и не помню, что я там в викторине менял, но вот на всякий случай:
 TriviaMod.lua ( 11.7 килобайт ) : 9

Автор: Nickolya 22.11.2010, 21:42

Вся байда из-за смены локали в викторине:

Код
os.setlocale"Russian_Russia.1251"
из за-этого действа меняется знак, являющийся разделителем целой и дробной части числа. Меняется как раз с точки на запятую...

Чтобы курс валют заработал, надо в скрипте курса валют 2 раза удалить
Код
Value=string.gsub(Value,",",".")

Автор: bonch 22.11.2010, 21:55

Благодарю. Работает.

Автор: Jack 14.12.2010, 11:37

украинский курс перестал работать)

Автор: -slava- 15.1.2011, 10:22

Не большая трабла
Синтаксис ....0.4.1.2\scripts\валюта.lua:91: attempt to index field '?' (a nil value)
Помогите разобраться!

Автор: Nickolya 15.1.2011, 23:00

-slava-, читай тему, прежде чем в нее писать, пожалуйста.

Автор: WINS 16.1.2011, 19:17

Замена кода с 37 поста не выручает, ошибка остается. amazing.gif

Цитата
scripts\Currency.lua:91: attempt to index field '?' (a nil value)
просьба помочь, скрипт без замен приложил

 Currency.lua ( 4.98 килобайт ) : 4
 

Автор: Marc 18.1.2011, 14:00

WINS!

На этой странице в сообщении 51 есть скрипт валют. В нём надо сделать изменения из 55 сообщения!
Вот и всё! Скрипт замечательно работает (без ощибок)
Советую Вам использовать скрипт из 51 сообщения.

РС. На этих выходных не был доступен сам сервер данных, но сейчас он работает.

Автор: WINS 19.1.2011, 19:28

сервак виновник знач был big_smile.gif все робит опять

Автор: Nikolaevich 24.5.2016, 9:01

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

 

 Currency.lua ( 4.56 килобайт ) : 5
 

Автор: Артём 9.6.2016, 11:09

Цитата(Nikolaevich @ 24.5.2016, 9:01) *
...а вот цифры так и не получилось в один ряд поставить может кто поможет.

попробуй использовать \t табуляцию
правда тебе это не сильно поможет, потому что это ещё зависит и от кол-во букво-валют big_smile.gif