В настоящее время данный скрипт является морально устаревшим. Всех заинтересованных прошу ознакомиться с более функциональной версией скрипта-информера курсов валют на 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

    Сергей, Вам бы на правильный скрипт лучше внимание обратить: https://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

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

  6. Макс | 20.03.2014

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

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