На главную Написать письмо

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 ? 'поднялся' : 'опустился').'&nbsp;&nbsp;&nbsp;&nbsp;<strong>USD</strong> ЦБ РФ </td>
<td align="center"><strong>'.$val_today['dollar'].'</strong></td>
</tr>
<tr>
<td>'.($euro_up ? 'поднялся' : 'опустился').'&nbsp;&nbsp;&nbsp;&nbsp;<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 'имя файла с этим скриптом';?>

Скачать архив со скриптом

 

 

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

наверх