DailyInfo от ЦБ и PEAR::SOAP

DailyInfo от ЦБ и PEAR::SOAP

Никак не получается поиметь ответ от веб-сервисов ЦБРФ.

Ошибка все время одна и та же: "Server was unable to process request. --> The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

В каком формате оно хочет дату? В примерах (GetCursOnDateXML) написано dateTime, но значения вида 2005-12-08-T12:00:00.000+03:00 оно не принимает. Пробовал и другие варианты - 2005-12-08, 2005-12-08 12:00:00, еще какие-то. Все время одна и та же ошибка (см. выше).

Это я никак его формат dateTime не могу угадать, или у меня в коде где-то ошибка?

PHP:
<?php
require_once("SOAP/Client.php");

$wsdl_uri    = 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL';
$soap_action = 'http://web.cbr.ru/GetCursOnDateXML';
$namespace   = 'http://web.cbr.ru/';

$request    = 'GetCursOnDateXML';
$parameters = array('On_date' => date("Y-m-d")."T12:00:00.000+03:00");

$SoapClient = new SOAP_Client($wsdl_uri); // вторым аргументом пробовал и false и true
$result = $SoapClient->call($request, $parameters, $namespace, $soap_action);

print_r($result);
?>
 
Милисекунды убирал - результат тот же.
Версия PHP (4.3) роли не играет, т.к. ошибка приходит с сервера:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. --&gt; The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.</faultstring>
<detail />
</soap:Fault>

</soap:Body>
</soap:Envelope>
 

Romashov

экспериментатор
Версия PHP (4.3) роли не играет
просто пятый как раз специальный идентификатор с в функции [m]date[/m] поддерживает - для вывода datetime строго по необходимому здесь стандарту
 

raisa05

Новичок
ПРОСТИТЕ ЕСЛИ НЕ В ТЕМУ, Я ТАК ПОНЯЛА НУЖЕН КОД ПОЛУЧЕНИЯ КУРСА ВАЛЮТ. С ЦБ РФ. У МЕНЯ ЕСТЬ ТАКОЙ, ВСЕ РАБОТАЕТ Я ПРОВЕРЯЛА.

Загрузка курса валют с сайта ЦентроБанка


Источником информации об официальном курсе валюты служит сайт Центробанка Российской Федерации. Обратившись по адресу сайта Центробанка http://www.cbr.ru/currency_base/XML_daily.asp?date_req=$date, где $data дата в формате ДД/ММ/ГГГГ можно узнать курс валют установленных в запрошенный день. К примеру, узнать каков был курс валюты на 14 января 2005 года можно по адресу http://www.cbr.ru/currency_base/XML_daily.asp?date_req=14/01/2005. В результате будет открыта страница, содержащая таблицу с курсами валют, установленными в этот день. Остаётся только загрузить страницу и разобрать HTML-код при помощи регулярных выражений. Ниже представлен скрипт, загружающий курсы доллара и евро с сайта Центрабанка (http://www.cbr.ru)


PHP:
<?php 

  // Получаем текущие курсы валют в rss-формате с сайта [url]www.cbr.ru[/url] 

  $content = get_content(); 

  // Разбираем содержимое, при помощи регулярных выражений 

  $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"; 

  preg_match_all($pattern, $content, $out, PREG_SET_ORDER); 

  $dollar = ""; 

  $euro = ""; 

  foreach($out as $cur) 

  { 

    if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]); 

    if($cur[2] == 978) $euro   = str_replace(",",".",$cur[4]); 

  } 

  echo "Доллар - ".$dollar."<br>"; 

  echo "Евро - ".$euro."<br>"; 

  function get_content() 

  { 

    // Формируем сегодняшнюю дату 

    $date = date("d/m/Y"); 

    // Формируем ссылку 

    $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; 

    // Загружаем HTML-страницу 

    $fd = fopen($link, "r"); 

    $text=""; 

    if (!$fd) echo "Запрашиваемая страница не найдена"; 

    else 

    { 

      // Чтение содержимого файла в переменную $text 

      while (!feof ($fd)) $text .= fgets($fd, 4096); 

    } 

    // Закрыть открытый файловый дескриптор 

    fclose ($fd); 

    return $text; 

  } 

?>
ЕСЛИ НЕ В ТЕМУ ТО ИЗВИНИТЕ ТОГДА
 
Спасибо, наводка полезная. Для моей задачи годится.

Но основной вопрос в силе :) Хотелось бы разобраться с их веб-сервисом.
 

moxnatiy

Новичок
raisa05
white phoenix

ужос! уберите эту гадость...

Дмитрий Пленкин
почему бы не задать этот вопрос их техсапортам?
 

ksnk

прохожий
moxnatiy
Не понял в чем тут Ужос! :) Один Прег и в общем-то не очень неопимально написанныей разбор его результатов... Разве что действительно много пустых строк :)
Техсаппорт, кстати, не обязан поддерживать все возможные форматы даты...
 
Само регулярное выражение в примере ужасно (у меня из-за него горизонтальный скролл даже появился :)). Можно обойтись гораздо более простым.

А насчет саппорта - поддерживать хоть какие-то форматы даты он вообще не обязан :), но может подсказать, какой формат нужен сервису. Надеюсь, что на письмо ответят...
 
Сверху