В настоящее время данный скрипт является морально устаревшим. Всех заинтересованных прошу ознакомиться с более функциональной версией скрипта-информера курсов валют на php.

Часто замечаем информеры курса USD, Euro и других валют на сайтах, но вот как получить актуальное значение курса, да ещё и использовать в php как переменную? Легко:

При обращении к скрипту Центрального банка РФ, формируемому XML ответ, мы получаем ответ вида :

<?xml version=»1.0″ encoding=»windows-1251″ ?>
<ValCurs Date=»30.12.2007″ name=»Foreign Currency Market»>
[…]
<Valute ID=»R01235″>
<NumCode>840</NumCode>
<CharCode>USD</CharCode>
<Nominal>1</Nominal>
<Name>Доллар США</Name>
<Value>24,5462</Value>

</Valute>
<Valute ID=»R01239″>
<NumCode>978</NumCode>
<CharCode>EUR</CharCode>
<Nominal>1</Nominal>
<Name>Евро</Name>
<Value>35,9332</Value>
</Valute>
[…]
</ValCurs>

Остается лишь его пропарсить, обработав необходимые данные:

function centrobank_get_valute() {
$fopen = fopen(«http://www.cbr.ru/scripts/XML_daily.asp?date_req=».date(«d/m/Y»), «r»);
if (!$fopen) {
return array(‘<div style=»background-color: #f9f9f9; padding:5px; border: 1px solid #a00;»>Не удалось подключиться к центробанку. Валютная цена недоступна.</div>’, », »);
exit;
} else {
$text = «»;
while (!feof ($fopen)) {
$text .= fgets($fopen, 4096);
}
}
fclose($fopen);
preg_match_all(«#<Valute ID=\»([^\»]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i», $text, $final_texts, PREG_SET_ORDER);
foreach($final_texts as $final_text) {
if($final_text[2] == 840) {
$kurs_dollar = str_replace(«,», «.», $final_text[4]);
}
if($final_text[2] == 978) {
$kurs_euro = str_replace(«,», «.», $final_text[4]);
}
}
return array(null, $kurs_dollar, $kurs_euro);
}

Затем, в нужном месте один раз вызываем:

<?php
if(function_exists(‘centrobank_get_valute’)){
$cbv = centrobank_get_valute();
$cb_valute_value_err = $cbv[0];
$cb_valute_value_usd = $cbv[1];
$cb_valute_value_euro = $cbv[2];
if($cb_valute_value_err !== ») print $cbv[0];
}
?>

Теперь, в переменной $cb_valute_value_usd храниться курс доллара, $cb_valute_value_euro — евро. $cb_valute_value_err содержит ошибку. если всё удачно, то эта переменная пустая.

Комментарии к записи “Курсы валют на сайте с помощью php”

  1. Сергей | 16.03.2012

    Спасибо за скрипт.
    Некоторые советы при копипасте скрипта.
    1. Если ничего не работает, то перепишите кавычки (здесь используются нестандартные с другими кодами).
    2. Могут не совпадать кодировки на вашем сайте с сайтом cbr.ru (у них используется windows-1251).
    Я пофиксил так (у меня utf-8):

    while (!feof ($fopen)) {
    $text .= fgets($fopen, 4096);
    }
    $text = iconv('WINDOWS-1251', 'UTF-8', $text);

  2. Макс | 17.03.2012

    Сергей, Вам бы на правильный скрипт лучше внимание обратить: http://maksis.ru/php-skript-informer-kursa-valyut.html

  3. ЯаЯа | 20.03.2014

    А правильного-то скрипта и нет.
    «File does not exist.»…

  4. Макс | 20.03.2014

    ЯаЯа, сам скрипт не проверял, но XML ЦБ _http://www.cbr.ru/scripts/XML_daily.asp?date_req=20/03/2014 работает вроде как

    Что именно у вас не так?

  5. ЯаЯа | 20.03.2014

    _http://maksis.ru/?dl_id=1
    Скачать скрипт-информер курса валют (53,0 KiB, загрузок: 4 542)
    Клик! И фик)

  6. Макс | 20.03.2014

    Спасибо за «наводку», починил, пользуйтесь. (Сломалось при смене хостинга)

Оставьте свой комментарий