Веб Дизайн - статьи

       

Подключение к веб-сервису


Описание веб-сервиса, к которому мы собираемся подключаться, расположено по адресу . Описание задается на языке WSDL - Web Service Description Language. Фактически, это XML-документ определенной структуры.

В описании указывается какие методы предоставляет веб-сервис и как их следует вызывать. Нас интересует метод getCursOnDateXML. Он принимает в качестве аргумента дату и возвращает массив записей следующего вида:

  • Название валюты (Vname);
  • Номинал (Vnom);
  • Курс (Vcurs);
  • Цифровой код валюты (Vcode);
  • Символьный код валюты (VchCode).
  • Для того чтобы воспользоваться веб-сервисом нам необходимо сгенерировать клиентские заглушки (stubs). Эта процедура выполняется при помощи программы wsdl2ruby.rb, которая входит в состав библиотеки SOAP4R:

    wsdl2ruby.rb --wsdl http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL --type client

    ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}binding ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}operation ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}body ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}address I, [2008-09-07T00:04:04.847391 #5995] INFO -- app: Creating class definition. I, [2008-09-07T00:04:04.847750 #5995] INFO -- app: Creates file 'default.rb'. I, [2008-09-07T00:04:05.060365 #5995] INFO -- app: Creating mapping registry definition. I, [2008-09-07T00:04:05.060776 #5995] INFO -- app: Creates file 'defaultMappingRegistry.rb'. I, [2008-09-07T00:04:05.119316 #5995] INFO -- app: Creating driver. I, [2008-09-07T00:04:05.119752 #5995] INFO -- app: Creates file 'defaultDriver.rb'. I, [2008-09-07T00:04:05.219052 #5995] INFO -- app: Creating client skelton. I, [2008-09-07T00:04:05.219560 #5995] INFO -- app: Creates file 'DailyInfoClient.rb'. I, [2008-09-07T00:04:05.319125 #5995] INFO -- app: End of app. (status: 0) Как видно из отладочного вывода, программа сгенерировала четыре файла:

  • default.rb;
  • defaultMappingRegistry.rb;
  • defaultDriver.rb;


  • DailyInfoClient.rb.
  • Для работы с веб-сервисом необходимы первые три.


    Последний файл не обязателен. Это пример клиентского кода. Итак, теперь все готово для написания тестового приложения: #!/usr/bin/ruby

    # # get_curs.rb # # Александр Симаков, <xdr (тчк) box на Google Mail> # http://alexander-simakov.blogspot.com/ #

    # Подключаем библиотеку SOAP4R require 'rubygems' require_gem 'soap4r'

    # Подключаем клиентские заглушки require 'defaultDriver.rb'

    # При помощи этого объекта мы будем вызывать # методы веб-сервиса serv = DailyInfoSoap.new

    # Выводить отладочную информацию если ruby # был запущен с ключом -d serv.wiredump_dev = STDERR if $DEBUG

    # Формируем запрос request = GetCursOnDateXML.new(DateTime.now)

    # Отправляем запрос на сервер и получаем ответ response = serv.getCursOnDateXML(request)

    # Анализируем ответ и выводим результат items = response.getCursOnDateXMLResult.valuteData.valuteCursOnDate

    items.each do |item| puts "---------------------------------" puts "Название: " + item['Vname'].strip puts "Числовой код: " + item['Vcode'] puts "Символьный код: " + item['VchCode'] puts "Номинал: " + item['Vnom'] puts "Курс: " + item['Vcurs'] end

    Сохраните этот файл в той же директории и запустите его на выполнение. Вот как выглядел результат на момент написания статьи:

    --------------------------------- Название: Австралийский доллар Числовой код: 36 Символьный код: AUD Номинал: 1 Курс: 21.0261 --------------------------------- Название: Фунт стерлингов Соединенного королевства Числовой код: 826 Символьный код: GBP Номинал: 1 Курс: 44.9826 --------------------------------- Название: Белорусский рубль Числовой код: 974 Символьный код: BYR Номинал: 1000 Курс: 11.9615 --------------------------------- Название: Датская крона Числовой код: 208 Символьный код: DKK Номинал: 10 Курс: 48.5829 --------------------------------- Название: Доллар США Числовой код: 840 Символьный код: USD Номинал: 1 Курс: 25.2626 --------------------------------- Название: Евро Числовой код: 978 Символьный код: EUR Номинал: 1 Курс: 36.2670 --------------------------------- Название: Исландская крона Числовой код: 352 Символьный код: ISK Номинал: 100 Курс: 28.8435 --------------------------------- Название: Казахский тенге Числовой код: 398 Символьный код: KZT Номинал: 100 Курс: 21.1120 --------------------------------- Название: Канадский доллар Числовой код: 124 Символьный код: CAD Номинал: 1 Курс: 23.8642 --------------------------------- Название: Китайский юань Жэньминьби Числовой код: 156 Символьный код: CNY Номинал: 10 Курс: 36.9304 --------------------------------- Название: Норвежская крона Числовой код: 578 Символьный код: NOK Номинал: 10 Курс: 45.2719 --------------------------------- Название: СДР (специальные права заимствования) Числовой код: 960 Символьный код: XDR Номинал: 1 Курс: 39.0691 --------------------------------- Название: Сингапурский доллар Числовой код: 702 Символьный код: SGD Номинал: 1 Курс: 17.7668 --------------------------------- Название: Новая турецкая лира Числовой код: 949 Символьный код: TRY Номинал: 1 Курс: 20.7564 --------------------------------- Название: Украинская гривна Числовой код: 980 Символьный код: UAH Номинал: 10 Курс: 53.5225 --------------------------------- Название: Шведская крона Числовой код: 752 Символьный код: SEK Номинал: 10 Курс: 38.3377 --------------------------------- Название: Швейцарский франк Числовой код: 756 Символьный код: CHF Номинал: 1 Курс: 22.5962 --------------------------------- Название: Японская иена Числовой код: 392 Символьный код: JPY Номинал: 100 Курс: 23.2653 Отмечу, что данные возвращаются в кодировке UTF-8.Таким образом, если на вашем компьютере используется другая кодировка, то названия валют будут нечитаемыми. В этом случае придется конвертировать данные вручную.


    Содержание раздела