Обратившись по адресу сайта Центробанка 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)
// Получаем текущие курсы валют в 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;
}
© Copyright 2008-2019 by KDG