В настоящее время данный скрипт является морально устаревшим. Всех заинтересованных прошу ознакомиться с более функциональной версией скрипта-информера курсов валют на 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)
Клик! И фик)
Спасибо за «наводку», починил, пользуйтесь. (Сломалось при смене хостинга)