Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Курс валют
 
 автор: sim5   (07.01.2007 в 04:54)   письмо автору
 
 

Использовал на сайте запрос курса валют с адреса http://www.cbr.ru/scripts/XML_dynamic.asp, и обработку полученных, предложенным у них же кодом. Но вот с 6.01.2007 я стал получать курсы с нулевыми значениями, причем дата отсутствует. В мае прошлого года тоже были проблемы с получением курса валюты, но тогда просто увеличил период за который запрашивалась валюта.

Попробовал код предложенный по ссылке
http://softtime.ru/forum/read.php?id_forum=1&id_theme=26072&page=1. Тестирую на локальной машине и получаю ответ:

Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей XSL. Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.
--------------------------------------------------------------------------------
В документах XML допускается только один элемент верхнего уровня. Ошибка при обработке ресурса ''http://local/main.php''. Строка 130,Положение 2

Файл main.php содержит только код предложенный в выше указанной ссылке. В чем проблема.

P.S. 13:49 нашего времени (GMT +9), пробую опять код softtime - все валюты отображаются.
Что в Банке РФ долго пьют или в чем причина. Надо знать, чтобы в случае ее повторения, брать курс не с адреса, а из файла на сервере, который записывать при последнем удачном обращении к Банку. Причину по адресу http://www.cbr.ru/scripts/XML_dynamic.asp я знаю, а эту - не догадался сохранить полученный (возможно в нем ошибка) файл с http://www.cbr.ru/scripts/XML_daily.asp. Кто знает?

И еще. Отображаются только курсы, без дат. Можно ли получить из этого ресурса дату этого курса или нет?
Например, по адресу http://www.cbr.ru/scripts/XML_dynamic.asp, я могу запросить курс по конкретной дате или за период.

   
 
 автор: Саня   (07.01.2007 в 12:18)   письмо автору
 
   для: sim5   (07.01.2007 в 04:54)
 

Если зайти на сайт и посмотреть http://www.cbr.ru/currency_base/daily.asp?C_month=01&C_year=2007&date_req=01%2F01%2F2007&d1=1, то с 31 декабря 2006 по 7 января 2007 можно увидеть следующее: Курсы валют за DD/MM/YYYY не зарегистрированы.
Скрипт курса валют находится немного в другом месте: http://www.cbr.ru/scripts/XML_daily.asp, а не /XML_dynamic.asp.
Это напоминает мне ситуацию с gmail, когда остановился счётчик места для почты.

   
 
 автор: sim5   (07.01.2007 в 16:33)   письмо автору
 
   для: Саня   (07.01.2007 в 12:18)
 

Скриптом http://www.cbr.ru/currency_base/daily.asp? пользовался год, обрубился буквально вчера. Еще с мая месяца, в запрсе увеличил период выбора курса, который сейчас равен 10 дням - по идее вполне хватает, для получения последней даты, а это было бы 21 декабря, однако почему-то нули стал получать.
А http://www.cbr.ru/currency_base/daily.asp? дату курса валюты не выдает?

   
 
 автор: Саня   (07.01.2007 в 17:51)   письмо автору
 
   для: sim5   (07.01.2007 в 16:33)
 

Каким скриптом вы пользуетесь?

> дату курса валюты не выдает?
Зайдите и посмотрите на параметры корневого тега
http://www.cbr.ru/scripts/XML_daily.asp?date_rec=07/01/2007

   
 
 автор: sim5   (07.01.2007 в 20:07)   письмо автору
 
   для: Саня   (07.01.2007 в 17:51)
 

До этого пользовался этим, но без картинок :


<?
# File: usd2.php, v.1.0/20010803
# Скрипт для вывода информера по поводу курса доллара, установленного ЦБР
# (c) 2001, Mikhail Turenko, http://www.turenko.net, <mikhail@turenko.net>
# Использование: <IMG src="usd.php" width="88" height="41" border="0"/>
# Выводит PNG, размер выбирается автоматически
# строка "dd/mm/yyyy: 1USD=29.30RUR (+0.02)"

# Базовый URL скрипта на cbr.ru
$scripturl 'http://www.cbr.ru/scripts/XML_dynamic.asp';

# Начальная дата для запроса  (сегодня - 2 дня)
$date_1=date('d/m/Y'time()-172800);

# Конечная дата (чтобы учитывать завтра добавьте параметр time()+86400)
$date_2=date('d/m/Y');

# Таким образом, мы получим данные либо за 2, либо за 3 последних дня.
# За 2 - если на "сегодня" курс еще не выставили, иначе - за 3

# Код валюты в архиве данных cbr.ru
# код доллара R01235, код евро R01239
$currency_code='R01235';

# URL для запроса данных
$requrl "{$scripturl}?date_req1={$date_1}&date_req2={$date_2}&VAL_NM_RQ={$currency_code}";

$doc file($requrl);
$doc implode($doc'');

# инициализируем массив
$r = array();

# ищем <ValCurs>...</ValCurs>
if(preg_match("/<ValCurs.*?>(.*?)<\/ValCurs>/is"$doc$m))
    
# а потом ищем все вхождения <Record>...</Record>
    
preg_match_all("/<Record(.*?)>(.*?)<\/Record>/is"$m[1], $rPREG_SET_ORDER);

$m = array();    # его уже использовали, реинициализируем
$d = array();    # этот тоже проинициализируем

# Сканируем на предмет самых нужных цифр
for($i=0$i<count($r); $i++) {
    if(
preg_match("/Date=\"(\d{2})\.(\d{2})\.(\d{4})\"/is"$r[$i][1],$m)) {
        
$dv "{$m[1]}/{$m[2]}/{$m[3]}"# Приводим дату в норм. вид
        
if(preg_match("/<Nominal>(.*?)<\/Nominal>.*?<Value>(.*?)<\/Value>/is"$r[$i][2], $m)) {
            
$m[2] = preg_replace("/,/",".",$m[2]);
            
$d[] = array($dv$m[1], $m[2]);
            }
        }
    }

$last array_pop($d);                # последний известный день
$prev array_pop($d);                # предпосл. известный день
$date $last[0];                # отображаемая дата
$rate sprintf("%.2f",$last[2]);        # отображаемый курс
# отображаемое изменение курса, например, "+0.02"
$delta = (($last[2]>$prev[2])?"+":"").sprintf("%.2f",$last[2]-$prev[2]);

#echo("{$date}: 1USD={$rate}RUR ({$delta})<BR>");

$string "{$date}: 1USD={$rate}RUR ({$delta})";
$h ImageFontHeight(2)+2;
$w ImageFontWidth(2)*strlen($string)+2;

header("Content-type: image/png"); # Отдаем HTTP-заголовок с типом данных
# Создаем пустое изображение
$im = @ImageCreate($w$h) or die("Cannot do ImageCreate()");

# Создаем всякие цвета
$bg ImageColorAllocate($im255255255);
$fg ImageColorAllocate($im000);
$fg2 ImageColorAllocate($im12000);
$bdr ImageColorAllocate($im224,224,224);
$bdr2 ImageColorAllocate($im160,160,160);

ImageColorTransparent($im$bg);
ImageString($im211$string$fg);

# Отдаем изображение на выход
ImagePNG($im);

# Освобождаем память из-под
ImageDestroy($im);
?>

   
 
 автор: Саня   (07.01.2007 в 21:01)   письмо автору
1.8 Кб
 
   для: sim5   (07.01.2007 в 20:07)
 

Я бы рекомендовал воспользоваться этим скриптом: http://www.softtime.ru/scripts/valute.php. Правда результат возвращается не за промежуток а за один день. И возвращается в виде текста, а не картинки.

Если хотите картинкой, я прикрепил скрипт.

В следующий раз большие листинги кода прикрепляйте к сообщению в виде вложения.

PS
Это место улыбнуло )
$doc = file($requrl); 
$doc = implode($doc, '');

   
 
 автор: sim5   (07.01.2007 в 21:22)   письмо автору
 
   для: Саня   (07.01.2007 в 21:01)
 

Этот код взят из примера на sbr.ru. Картинка мне не нужна. Нужна дата, и главное знать, что за глюки происходят у них. Какой код использовать, чтобы была гарантия, что они либо его не езменят либо не вокнут новый. Ведь код предложенный (я уже писал) softtime, также дал ошибку, а спустя время заработал.

   
 
 автор: Саня   (07.01.2007 в 21:37)   письмо автору
 
   для: sim5   (07.01.2007 в 21:22)
 

Единственная очевидная причина - это глюки cbr.ru

   
 
 автор: sim5   (07.01.2007 в 21:52)   письмо автору
 
   для: Саня   (07.01.2007 в 21:37)
 

Полностью согласен, но как их обойти. Каку проверку, вернее чего, надо делать? Пока глючил код, который взял от softtime, надо было файл хоть сохранить и посмотреть что в нем пришло. А сейчас - ждать снова Дня победы или 2008, когда в Росси долго пьют.

   
 
 автор: alwhite   (10.01.2007 в 00:36)   письмо автору
 
   для: Саня   (07.01.2007 в 21:37)
 

Неправда!!! cbr.ru не глючил, а просто не обновлял данные.... так все новогодние праздники он выдавал текущий курс на 30.12.06г и все работало без проблем... если считать что они просто не обновляли курс.... Вот посмотрите работу скрипта http://www.vzrosleem.ru/u-tel_sms_cron.php, только прошу не злоупотреблять, т.к. этот скрипт отправляет мне SMS с тем текстом что написан на: Переданные данные на телефон.... ну короче увидите результат на экране ....... скрипт курсы грузит с cbr.ru (доллар,евро, металлы) а погоду грузит с HMN.RU (город все меняется в переменных скрипта) и отправляет бесплатно на U-Tel с гисметео не стал грузить, т.к. для моего города он всегда сильно врет погоду... если интересует этот скрипт... пжл sms мне на http://smskopilka.ru/?info&id=10209 ... по прямому номеру не отвечу

   
 
 автор: cheops   (10.01.2007 в 01:22)   письмо автору
 
   для: alwhite   (10.01.2007 в 00:36)
 

Да и как их выдавать, если валютные торги не проводятся в новогодние каникулы и все биржи закрыты.

   
 
 автор: sim5   (10.01.2007 в 05:12)   письмо автору
 
   для: cheops   (10.01.2007 в 01:22)
 

Понятно, всем гулять охота. Но используя запрос валют по адресу http://www.cbr.ru/scripts/XML_dynamic.asp и обломившись в мае, я прописал период по курсу 10 дней. Работало до нового года - и облом.
Я делал так. Посетитель сайта, вначале получает ранее сохраненный курс валют из файла на сайте - если дата его сохранения и дата за который был установлен курс равны, то выводился курс из файла, если нет то запрос нового курса на sbr.ru и его запись в файл. В информер естественно выводилась дата установления курса, а не записи в файл. На новый год был получен курс 0:00 и БЕЗ ДАТЫ, по.тому и произошла ошибка. Я устроил проверку еще и на дату. На сайте пока используется этот же код и обновление курса получил только 10 января, хотя на mail.ru, например, видел новый уже за 9 число.
Пример от softtime, при пробе, выдал ошибку сразу, а заработал спустя минут 30, ну может чуть более. Кто знает, что в данном случае может быть причиной. Ну не охота глюков таких иметь вновь.

   
 
 автор: alwhite   (10.01.2007 в 05:23)   письмо автору
 
   для: sim5   (10.01.2007 в 05:12)
 

Я же написал -- в моем скрипте все в норме и работало.... а на счет обновления курса на сайте: я дописываю необходимые процедуры для своего сайта(еще не выставил контент), так написал скрипт и сразу предусмотрел проверку дат, т.к. на cbr при неотправлении параметра даты или отправлении написанной с ошибкой(ну допустим не существующей или прямой ссылки без указания названия парметра $data) сайт автоматом выдает последний известный сайтом курс, а при автообновлении курса на сайте -- проверяешь конкретную дату, если дата выданного запроса ниже дапустим на 3 дня(т.е. позавчера), то грузим для использования в инет-магазине вручную установленный курс, а загруженный автоматом умножаем на 0.03(3%) для получения внутреннего курса инет магазина.... Как со мной связаться по поводу данного скрипта...написано в предыдущем моем сообщении... еще написал себе скрипт поиска по сайту с эвристическим анализатором...

   
 
 автор: sim5   (10.01.2007 в 06:29)   письмо автору
 
   для: alwhite   (10.01.2007 в 05:23)
 

Не понял. Мне отвечает автор скрипта который я использую? И теперь гарантия, что проблем не будет и можно успокоиться?

   
 
 автор: alwhite   (10.01.2007 в 14:56)   письмо автору
 
   для: sim5   (10.01.2007 в 06:29)
 

Ytn я не автор скрипта который Вы используете, я автор своего скрипта(но все-равно подобного Вашему).... Просто хочу доказать, что cbr.ru не глючил и не глючит, а прекрасно работает

   
 
 автор: sim5   (10.01.2007 в 15:16)   письмо автору
 
   для: alwhite   (10.01.2007 в 14:56)
 

А я губу закатал. Да я не хотел ЦБ родной обижать, но глюк наблюдать, счастье имел дважды. Я тоже говорю, что не я их смоделировал.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования