Курсы валют на сайте с помощью php

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

 

 

6 комментариев

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

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

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

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

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

Ваш электронный адрес не будет опубликован.


*


пять + семь =