PHP скрипт Курс валют
Вот возникла надобность в таком скрипте, полазил я в инете, нашел парочку, но к сожалению в таком виде как они были практически их использовать было нельзя. Я над ними немного поколдовал и вот что у меня получилось.
Курсы валют получаем через RSS канал центробанка. Предположим нам нужен курс доллара и евро на сегодняшний день, плюс нужно показывать поднялся курс или понизился по сравнению со вчерашним днем. К тому же, как показала практика, необходимо серелизовывать, короче сохранять эти данные у себя, т.к. на выполнение запроса уходит приличное количество времени. Получился следующий механизм: скрипт получает курсы валют и формирует html код готовый к вставке на страницу сайта и сохраняет его в файл с именем содержащим текущую дату. При следующем заходе на сайт скрипт проверяет существует ли такаой файл, если да, то просто вставляет его содержимое в страницу, если нет, то получает новые данные, создает с ними файл и пытается удалить файл за вчерашний день. Вот и все.
<?
define('PATH','downloads/');
function getTodayFileName(){
return PATH.'kurs_valut_'.date('dmy').'.htm';
}
function getYesterdayFileName(){
return PATH.'kurs_valut_'.date("dmy",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))).'.htm';
}
function getValKurs(&$val,$date=null){
if($date==null) $date = date("d/m/Y");
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$content="";
if($fd){
// Чтение содержимого файла в переменную $content
while(!feof ($fd)) $content .= fgets($fd, 4096);
} else return;
// Закрыть открытый файловый дескриптор
fclose ($fd);
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
$val['dollar'] = "";
$val['euro'] = "";
foreach($out as $cur){
if($cur[2] == 840) $val['dollar'] = doubleVal(str_replace(",",".",$cur[4]));
if($cur[2] == 978) $val['euro'] = doubleVal(str_replace(",",".",$cur[4]));
}
}
if(!file_exists(getTodayFileName())){
$val_today = array();
$val_yesterday = array();
// получаем курсы валют
getValKurs($val_today);
getValKurs($val_yesterday,date("d/m/Y",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))));
// ставим признак, поднялся курс или нет
$dollar_up = ($val_today['dollar']-$val_yesterday['dollar'] > 0 ? true : false);
$euro_up = ($val_today['euro']-$val_yesterday['euro'] > 0 ? true : false);
tempnam('downloads',getTodayFileName());
$fp = fopen(getTodayFileName(), "w");
// пошел HTML код со вставкой полученных данных курсов валют, имените его как вам необходимо
fwrite($fp,'
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<td colspan="2">Курс валют на '.date('d/m/Y').'</td>
</tr>
<tr>
<td>'.($dollar_up ? 'поднялся' : 'опустился').' <strong>USD</strong> ЦБ РФ </td>
<td align="center"><strong>'.$val_today['dollar'].'</strong></td>
</tr>
<tr>
<td>'.($euro_up ? 'поднялся' : 'опустился').' <strong>EUR</strong> ЦБ РФ </td>
<td align="center"><strong>'.$val_today['euro'].'</strong></td>
</tr>
</table>
');
fclose($fp);
if(file_exists(getYesterdayFileName())) unlink(getYesterdayFileName());
}
readfile(getTodayFileName());
?>
Чтобы вставить это все в html, в том месте где Вам нужны курсы валют напишите следующее:
<? require 'имя файла с этим скриптом';?>
