Курсы валют на сайте с помощью php
2.04.2008 | комментариев 6В настоящее время данный скрипт является морально устаревшим. Всех заинтересованных прошу ознакомиться с более функциональной версией скрипта-информера курсов валют на 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 содержит ошибку. если всё удачно, то эта переменная пустая.
Сергей | 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);
Макс | 17.03.2012
Сергей, Вам бы на правильный скрипт лучше внимание обратить: https://maksis.ru/php-skript-informer-kursa-valyut.html
ЯаЯа | 20.03.2014
А правильного-то скрипта и нет.
“File does not exist.”…
Макс | 20.03.2014
ЯаЯа, сам скрипт не проверял, но XML ЦБ _http://www.cbr.ru/scripts/XML_daily.asp?date_req=20/03/2014 работает вроде как
Что именно у вас не так?
ЯаЯа | 20.03.2014
_https://maksis.ru/?dl_id=1
Скачать скрипт-информер курса валют (53,0 KiB, загрузок: 4 542)
Клик! И фик)
Макс | 20.03.2014
Спасибо за “наводку”, починил, пользуйтесь. (Сломалось при смене хостинга)