Приветствую Вас Гость | RSS

Delphi заготовки

Суббота, 11.05.2024, 23:08
Главная » 2012 » Апрель » 13 » Как получить курсы валют с сайта ЦБ РФ пример на Delphi.
08:05
Как получить курсы валют с сайта ЦБ РФ пример на Delphi.

на офицальном сайте Центрального Банка России  есть материал регламентирующий работу с данными о курсах валют

Получение данных, используя XML

     http://www.cbr.ru/scripts/Root.asp?Prtid=SXML

Пример1
Например, для получения котировок на заданный день
http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002
    date_req= Date of query (dd/mm/yyyy)
* если параметр(date_req) отсутствует, то Вы получите документ на последнюю зарегистрированную дату.

-- Справочник по кодам валют: http://www.cbr.ru/scripts/XML_val.asp?d=0
    d=0 Коды валют устанавливаемые ежедневно.
    d=1 Коды валют устанавливаемые ежемесячно.

http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002&d=1 - котировки валют устанавливаемые ежемесячно (устарело).
Aнгл. версия:
http://www.cbr.ru/scripts/XML_daily_eng.asp?date_req=22/01/2007
http://www.cbr.ru/scripts/XML_daily_eng.asp?date_req=01/01/2007&d=1

  Об изменении даты вступления в силу Приказа Банка России о курсах иностранных валют, устанавливаемых Банком России ежемесячно
Пример 2 ... на сайте.

Немного о XML

XML — это описанная в текстовом формате иерархическая структура, предназначенная для хранения любых данных. Визуально структура может быть представлена как дерево элементов. Элементы XML описываются тегами.

Рассмотрим пример простого кулинарного рецепта, размеченного с помощью XML:


<recipe name="хлеб" preptime="5" cooktime="180">
  <title>Простой хлеб</title>
  <ingredient amount="3" unit="стакан">Мука</ingredient>
  <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
  <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
  <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
  <instructions>
   <step>Смешать все ингредиенты и тщательно замесить.</step>
   <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
   <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... -->
   <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
  </instructions>
</recipe>
взято с сайта  http://ru.wikipedia.org/wiki/XML


пример строк полученных при запросе

http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002

<ValCurs Date="02/03/2002" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>16,0102</Value>
</Valute><Valute ID="R01035">
<NumCode>826</NumCode>
<CharCode>GBP</CharCode>
<Nominal>1</Nominal>
<Name>Фунт стерлингов Соединенного королевства</Name>
<Value>43,8254</Value>
</Valute>


таким образом мы видим

<ValCurs Date="02/03/2002" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>16,0102</Value>
</Valute><Valute ID="R01035">
<NumCode>826</NumCode>
<CharCode>GBP</CharCode>
<Nominal>1</Nominal>
<Name>Фунт стерлингов Соединенного королевства</Name>
<Value>43,8254</Value>
</Valute>

данные можно использовать в приложениях Delphi

для этого
  1. необходима реализовать доступ к XML файлу
  2. разобрать структуру XML файла
  3. Получить список валют и обменный курс валюты

1. Реализуем доступ к файлу

объявим
 глобальную переменную
uses WinInet;

Type
  Tvaluta=record
    ValutaName:string;
    Value:Extended;
    FullName:string;
    Nominal:Extended;
  end;


var

  Form1: TForm1;
  XMLDoc:string;



implementation


// функция получения текстового файла из сети интернет

function GetCursFile (const fileURL:string): string;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of char;
  BufferLen: DWORD;
  f: File;
  sAppName: String;
begin
  result:='';
  sAppName := ExtractFileName(Application.ExeName);
  hSession :=InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        result:=result+Buffer;
      until BufferLen = 0;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;

// не большая процедура - формирует строку запроса (URL) к серверу ЦБ РФ в зависимости от даты. 

Function GetUrlCBRF(date:Tdate):string;
begin
  result:='http://www.cbr.ru/scripts/XML_daily.asp?date_req='+FormatDateTime('DD/MM/YYYY',date);
end;


  2. разобрать структуру XML файла

// копировать текст между тегами
Function CopyTextFromTeg(s:string;s1,s2:string):string;
var i1,i2:integer;
    sm:string;
begin
  i1:=pos(s1,s);
  sm:=copy(s,i1,length(s));
  i2:=pos(s2,sm)+i1-1;
  result:=copy(s,i1+length(s1),i2-i1-length(s1));
end;


// получаем список валют в XML файле с сайта ЦБ РФ  в виде коротких наименований
Function GetListValuta(XMLDoc:string):String;
var x:integer;
    ValutaList:TstringList;
begin
   ValutaList:=TstringList.Create;
   ValutaList.Text:=XMLDoc;
   result:='';
   for X:=0 to ValutaList.count-1 do begin
     if pos('<CharCode>',ValutaList[x])>0 then
     result:=result+CopyTextFromTeg(ValutaList[x],'<CharCode>','</CharCode>')+#13+#10;
   end;
   ValutaList.free;
end;


// получаем курс валюты из  XMLDoc:string структуры
Function GetKursValutFromCBRF(Valuta:STring;XMLDoc:string):Tvaluta;
var ValutaList:TstringList;
    x:integer;
    s:string;
    ValueE,nominalE:Extended; // Валюта разрядность
begin
   ValutaList:=TstringList.Create;
   ValutaList.text:=XMLDoc;
  for X:=1 to ValutaList.count-1 do
    if pos('<CharCode>'+Valuta+'</CharCode>', ValutaList[x])>0 then begin
       s:=ValutaList[x+1];
       nominalE:=StrTofloat(CopyTextFromTeg(s,'<Nominal>','</Nominal>'));
       s:=ValutaList[x+3];
       ValueE:=StrTofloat(CopyTextFromTeg(s,'<Value>','</Value>'));
       result.Value:=ValueE/nominalE;
       result.ValutaName:=Valuta;
       s:=ValutaList[x+2];
       result.FullName:=CopyTextFromTeg(s,'<Name>','</Name>');
       result.Nominal:=nominalE;

    end;
   ValutaList.free;
end;


Полный текст программы можно скачать с сайта

http://netsoftware.ucoz.ru/20_poluchit_kursy_s_sajta_sbrf.zip



Просмотров: 7716 | Добавил: NetSoftWare | Рейтинг: 4.7/3
Всего комментариев: 3
3 Михаил  
0
Здравствуйте хотел попросить помощи.
Сама программа не работает при компиляции, невозможно выбрать валюту.

2 Роман  
0
доброго времени суток!
при выполнении XMLDoc:=GetCursFile(GetUrlCBRF(d_Date)); приходит текст в китайской кодировке. как победить?

1 темыч  
0
доброго времени суток!
прога не пашет при компиляции, невозможно выбрать валюту
Ответ: напиши мне на почту или в аську - подскажу как что делать!
ICQ 368-254-335
denis-naymov1985@mail.ru

Имя *:
Email *:
Код *: