Запрос курсов валют с wEB-сервиса ЦБ РФ

Запрос курсов валют с WEB-сервиса ЦБФ

 

Пример запроса курсов ЦБ с WEB-сервиса сервера www.cbr.ru. Для работы макроса необходимо, чтобы на рабочем месте или на сервере приложений был организован доступ к этому сайту, а так же установлен xmlsdk.exe(скачать можно с http://msdn.microsoft.com/downloads/default.aspx или отсюда).
А так же для ожидания окончания сеанса связи и пропихивания очереди виндовых сообщений
DLM-модуль rssutils.d32.

 

Сам текст макроса:

 

import rcw,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);

  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,8)," │ ",probadd(xmlNode.childNodes(1).Text,0,8)," │");

        i=i+1;

      end;

      [└────────────┴──────────┴──────────┘];

    else

      MsgBox("Ошибка загрузки курсов");

    end;

  end;

end;