Запрос курсов валют с веб-сервиса ЦБ
Скачать (rar-файл; Размер - 202866)Обсудить в форуме
Описание
Может кому-нибудь пригодиться.
Пример запроса курсов ЦБ с веб-сервиса сервера www.cbr.ru.
Для работы макроса необходимо, чтобы на рабочем месте или на сервере приложений был организован доступ в интеренет до этого сайта, а так же установлен xmlsdk.exe(скачать можно с http://msdn.microsoft.com/downloads/default.aspx)
а так же для ожидания окончания сеанса связи и пропихивания очереди виндовых сообщений длм-модуль rssutils.d32.
Пример запроса курсов ЦБ с веб-сервиса сервера www.cbr.ru.
Для работы макроса необходимо, чтобы на рабочем месте или на сервере приложений был организован доступ в интеренет до этого сайта, а так же установлен xmlsdk.exe(скачать можно с http://msdn.microsoft.com/downloads/default.aspx)
а так же для ожидания окончания сеанса связи и пропихивания очереди виндовых сообщений длм-модуль rssutils.d32.
Текст примера
import rcw; import rssutils;//вспомогательная библиотека //При установке на локальной машине //private var ax = CreateObject ("rsax","TRsAxServer","RsAxServer",false); //private var k=ax.CreateCOMObject ("Msxml.DOMDocument"); //При установке на сервере приложений private var k=ActiveX ("Msxml.DOMDocument"); private var url_request; private var NodeList,i=0,xmlNode,node_attr,datebeg=date(),dateend=date()+1,p=0; private Array spisnameval,spiskodval; /*Коректировка длины строки пробелами*/ private macro probadd(str,l,len) private var i=0; if(strlen(str)<len) if(l==0) while(i<len-strlen(str)) str=" "+str; end; else while(i<len-strlen(str)) str=str+" "; end; end; return str; elif(strlen(str)==len) return str; else return substr(str,1,len); end; end; if(MsgBoxEx("Ежеджневные(Да) или ежемесячные(Нет)?",MB_YES + MB_NO, IND_NO )==IND_YES) url_request = "http://www.cbr.ru/scripts/XML_val.asp?d=0"; else url_request = "http://www.cbr.ru/scripts/XML_val.asp?d=1"; end; if(k.Load(url_request)) ProcessMessages();//пропихивание очереди виндовых сообщений Sleep(5000);//обычный sleep, параметр в милисекундах ProcessMessages();//пропихивание очереди виндовых сообщений NodeList = k.selectNodes("*/Item"); while(i<(NodeList.length)) xmlNode = NodeList.Item(i).cloneNode(True); node_attr = xmlNode.Attributes(0); spisnameval[i]=substr(xmlNode.text,1,index(xmlNode.text," 1")); spiskodval [i]=node_attr.value;//xmlNode.Attributes(3); i=i+1; end; end; p=menu(spisnameval,"Выберите валюту","Выберите валюту"); if(getdate(datebeg,"Введите дату начала контировок")) if(getdate(dateend,"Введите дату окончания контировок")) if(strlen(trim(string(datebeg)))==9) datebeg="0"+trim(string(datebeg)); end; if(strlen(trim(string(dateend)))==9) dateend="0"+trim(string(dateend)); end; url_request= "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="+datebeg+"&date_req2="+dateend+"&VAL_NM_RQ="+trim(string(spiskodval[p])); i=0; if(k.Load(url_request)) ProcessMessages();//пропихивание очереди виндовых сообщений if((5000*(int((date(dateend)-date(datebeg))/365)))>1000) Sleep(5000*(int((date(dateend)-date(datebeg))/365))); else Sleep(5000); end; ProcessMessages();//пропихивание очереди виндовых сообщений NodeList = k.selectNodes("*/Record"); println(" ",spisnameval[p]); [┌────────────┬────────┬──────────┐]; [│ Дата │ Единиц │ Курс │]; [├────────────┼────────┼──────────┤]; while(i<(NodeList.length)) xmlNode = NodeList.Item(i).cloneNode(True); node_attr = xmlNode.Attributes(0); println("│ ",probadd(node_attr.Value,1,10)," │ ",probadd(xmlNode.childNodes(0).Text,0,6)," │ ",probadd(xmlNode.childNodes(1).Text,0,8)," │"); i=i+1; end; [└────────────┴────────┴──────────┘]; else MsgBox("Ошибка загрузки курсов"); end; end; end;