В настоящее время данный скрипт является морально устаревшим. Всех заинтересованных прошу ознакомиться с более функциональной версией скрипта-информера курсов валют на 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 содержит ошибку. если всё удачно, то эта переменная пустая.
Спасибо за скрипт.
Некоторые советы при копипасте скрипта.
1. Если ничего не работает, то перепишите кавычки (здесь используются нестандартные с другими кодами).
2. Могут не совпадать кодировки на вашем сайте с сайтом cbr.ru (у них используется windows-1251).
Я пофиксил так (у меня utf-8):
while (!feof ($fopen)) {
$text .= fgets($fopen, 4096);
}
$text = iconv('WINDOWS-1251', 'UTF-8', $text);
Сергей, Вам бы на правильный скрипт лучше внимание обратить: https://maksis.ru/php-skript-informer-kursa-valyut.html
А правильного-то скрипта и нет.
«File does not exist.»…
ЯаЯа, сам скрипт не проверял, но XML ЦБ _http://www.cbr.ru/scripts/XML_daily.asp?date_req=20/03/2014 работает вроде как
Что именно у вас не так?
_https://maksis.ru/?dl_id=1
Скачать скрипт-информер курса валют (53,0 KiB, загрузок: 4 542)
Клик! И фик)
Спасибо за «наводку», починил, пользуйтесь. (Сломалось при смене хостинга)