Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Источником информации об официальном курсе валюты служит сайт Центробанка Российской Федерации.
Обратившись по адресу сайта Центробанка http://www.cbr.ru/currency_base/XML_daily.asp?date_req=$date, где $data дата в формате ДД/ММ/ГГГГ можно узнать курс валют установленных в запрошенный день.
К примеру, узнать каков был курс валюты на 14 января 2009 года можно по адресу http://www.cbr.ru/currency_base/XML_daily.asp?date_req=14/01/2009. В результате будет открыта страница, содержащая таблицу с курсами валют, установленными в этот день. Остаётся только загрузить страницу и разобрать XML-код при помощи регулярных выражений. Ниже представлен скрипт, загружающий курсы доллара и евро с сайта Центробанка (http://www.cbr.ru)
Курс ЦБ РФ на 24.05.2022 00:00
Доллар - 58.2087
Евро - 60.3851
Пример получение курса валют на сегодня
// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
$content = get_content();
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
$dollar = "";
$euro = "";
foreach($out as $cur)
{
if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]);
}
echo "Доллар - ".$dollar."<br>";
echo "Евро - ".$euro."<br>";
function get_content()
{
// Формируем сегодняшнюю дату
$date = date("d/m/Y");
// Формируем ссылку
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date;
// Загружаем HTML-страницу
$fd = @fopen($link, "r");
$text="";
if (!$fd) echo "Сервер ЦБ не отвечает";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
// Закрыть открытый файловый дескриптор
fclose ($fd);
}
return $text;
}
Вариант получение курса валют с кешированием
list($dollar, $euro)=load_kurs();
echo "<div>Курс ЦБ РФ на <b>".date("d.m.Y H:i",filemtime($_SERVER['DOCUMENT_ROOT']."/log/kurs.txt"))."</b><br>
Доллар - <b>".$dollar."</b><br>
Евро - <b>".$euro."</b></div>";
function load_kurs()
{
define("tsKurs","15:00:00"); # Время смены курса центральным банком
$kurs_file=fb_tmpdir."kurs.txt";
if (file_exists($kurs_file)){
$lastModified=filemtime($kurs_file);
// каждые 24 часа, но с учетом времени смены курса центральным банком
if (date("Y-m-d H:i:s",$lastModified) > date("Y-m-d H:i:s",time()-60*60*24) && !(date("H:i:s",$lastModified) < tsKurs && date("H:i:s")>tsKurs ) ) {
return explode('|',file_get_contents($kurs_file));
//echo "<!--Курс ЦБ на ".date("Y-m-d H:i:s",$lastModified)."<br>Доллар - <b>".$dollar."</b><br>Евро - <b>".$euro."</b><br>".$df1."-->";
}
}
// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
$content = get_content();
if(!$content&&file_exists($kurs_file)){// считаю по старому курсу если он есть
return explode('|',file_get_contents($kurs_file));
}
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out1, PREG_SET_ORDER);
$dollar = "";
$euro = "";
foreach($out1 as $cur1)
{
if($cur1[2] == 840) $dollar = str_replace(",",".",$cur1[4]);
if($cur1[2] == 978) $euro = str_replace(",",".",$cur1[4]);
}
if(file_put_contents($kurs_file, $kurs=($dollar.'|'.$euro))<7)die('Ошибка записи в '.$kurs_file);
return explode('|',$kurs);
}
function get_content()
{
// Формируем сегодняшнюю дату
$date = date("d/m/Y");
// Формируем ссылку
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date;
// Загружаем HTML-страницу
$fd = @fopen($link, "r");
$text="";
if (!$fd) echo "<h3>Сервер ЦБ не отвечает!</h3>";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= @fgets($fd, 4096);
// Закрыть открытый файловый дескриптор
@fclose ($fd);
}
return $text;
}