Создание клиента для получения курса валют с WSDL Web Service
Центробанка http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl
Для работы с сервисом будет использована среда разработки Delphi XE2.
Создадим новый проект VLC Forms Application, затем идем в File-New-Others-WebServices- WSDL Importer
Вставляем адрес сервиса
Выбор протокола, по умолчанию авто
Полученный модуль, его нужно добавить USES в главной формы
На странице сервиса http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
подробно расписаны все его функции.
Нас интересует функция GetCursOnDateXML
Получение ежедневных курсов валют (как XMLDocument).
В качестве входного параметра ей нужно передать дату в формате TXSDateTime;
По в вики русским по белому написано : « Use AsUTCDateTime to read the value of the TXSCustomDateTime object into a variable of type TDateTime or set its value from a TDateTime value..»
Для этого создадим класс Date := TXSDateTime.Create;
И присвоим ему сегодняшнюю дату, используя функцию Now , (она возвращает дату в формате TDateTime. )
Date.AsUTCDateTime := Now;
Кинем на форму компонент Memo и Button, для последнего напишем обработчик события OnClick
[cc lang=”delphi” tab_size=”2″ line_numbers=”false” no_links=”false”]
var
ws: DailyInfoSoap;
Date: TXSDateTime;
Res: GetCursOnDateResult;
XML_Data: TXMLData;
Xml: IXMLDocument;
FRootNode: IXMLNode;
i: integer;
begin
Xml := NewXMLDocument; // создали новый документ
Date := TXSDateTime.Create;
Date.AsUTCDateTime := Now; // поставили время
ws := GetDailyInfoSoap(); // получаем интерфейс веб-сервиса
Res := GetCursOnDateResult.Create; // создаем класс для получения результата
Res.schema := ws.GetCursOnDateXML(Date); // запись в поле класса
XML_Data := Res.schema; // переводим данные в переменную XML_Data
Memo1.Text := XML_Data.XMLNode.Xml; // выводим весь вернувшийся блок XML в компонент мемо1
Xml.DocumentElement := XML_Data.XMLNode;
Xml.SaveToFile(‘CBRF.xml’); // сохранили блок XML в файл CBRF.xml располагается он рядом с exe файлом нашей программы
FRootNode := Xml.ChildNodes.FindNode(‘ValuteData’); // смотрим содержимое корневой ветви ValuteData
for i := 0 to FRootNode.ChildNodes.Count – 1 do // проходим в цикле по всем дочерним ветвям ValuteData
begin
if FRootNode.ChildNodes.Nodes[i].ChildNodes.FindNode(‘VchCode’).NodeValue = ‘USD’; // ищем блок c Долларами США
then
ShowMessage(FRootNode.ChildNodes.Nodes[i].ChildNodes.FindNode(‘Vcurs’).NodeValue);
// если нашли выводим на экран сообщение
end;
Res.Destroy;// уничтожаем класс, чтобы не было утечек памяти
Date.Destroy;// уничтожаем класс, чтобы не было утечек памяти
end;
[/cc]
Список всех доступных валют можно посмотреть в Memo1, также в сохраненном файле CBRF.xml.
Полный список функций сервиса находится по адресу
http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
Здравствуйте! пробую сделать на делпи 10. не получается куча ошибок.
подходит данная инcинструкция для delphi 10
Не знаю. В статье показан принцип. Дальше всё зависит от Вас.