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

Автор:R-Style Softlab
Дата:08.08.2006
Просмотров:2243
Скачиваний:708
Оценка:, Оценок - 3
Скачать (rar-файл; Размер - 202866)

Обсудить в форуме

Описание

Может кому-нибудь пригодиться.
Пример запроса курсов ЦБ с веб-сервиса сервера 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;