Главная » Мои разработки » Модуль формирующий информер «Курсы валют» с учетом динамики

Модуль формирующий информер «Курсы валют» с учетом динамики

Данный модуль был создан, когда работал над созданием интранет-портала для компании MR-Group. Дизайн готовых информеров не подходил под дизайн портала. Поэтому, немного узучив теорию по парсингу xml файлов и поискав нужную информацию в интернете - приступил к созданию модуля, который выводил бы информацию по курсу валют (доллар и евро) на текущий день, а также отображал разницу курсов по сравнению с предыдущим днем.

В конечном итоге всё выглядело так:

Теперь расскажу детально о том, как сделать подобный информер.

Информация по курсу валют формируется на сайте cbr.ru (Центробанк РФ), в формате xml и содержит информацию с котировками всех мировых валют на определенную дату.

Посмотреть данную информацию можно введя в браузере:

http://www.cbr.ru/scripts/XML_daily.asp — если нужна информация по котировкам на текущий день;
http://www.cbr.ru/scripts/XML_daily.asp?date_req=22/07/2009 — если нужна информация по котировкам на определенный день, в данном примере на 22 июля 2009 года.

Данную информацию забираем с помощью функции, для текущего дня и предыдущего:

функция для получения курса доллара и евро на текущий день

  1. function get_content_today()
  2. {
  3. // Формируем сегодняшнюю дату
  4. $date_today = date("d/m/Y");
  5. // Формируем ссылку
  6. $link_today = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date_today";
  7. // Загружаем HTML-страницу
  8. $fd_today = fopen($link_today, "r");
  9. $text_today="";
  10. if (!$fd_today) echo "Запрашиваемая страница не найдена";
  11. else
  12. {
  13. // Чтение содержимого файла в переменную $text
  14. while (!feof ($fd_today)) $text_today .= fgets($fd_today, 4096);
  15. }
  16. fclose ($fd_today);
  17. return $text_today;

функция для получения курса валют на предыдущий день, практически такая же, но со смещением на один день

  1. function get_content_yesterday()
  2. {
  3. // Формируем меньшую на один день дату
  4. $date_yesterday = date("d/m/Y", mktime(0, 0, 0, date("m"), date("d") - 1));
  5. $link_yesterday = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date_yesterday";
  6. $fd_yesterday = fopen($link_yesterday, "r");
  7. $text_yesterday="";
  8. if (!$fd_yesterday) echo "Запрашиваемая страница не найдена";
  9. else { while (!feof ($fd_yesterday)) $text_yesterday .= fgets($fd_yesterday, 4096); }
  10. fclose ($fd_yesterday);
  11. return $text_yesterday;
  12. }

Загрузка и парсировка xml:

  1. // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
  2. $content_today = get_content_today();
  3. $content_yesterday = get_content_yesterday();
  4. // Разбираем содержимое xml-файла, при помощи регулярных выражений
  5. $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  6. // Для курсов валют на текущий день
  7. preg_match_all($pattern, $content_today, $out_today, PREG_SET_ORDER);
  8. // Для курсов валют на предыдущий день
  9. preg_match_all($pattern, $content_yesterday, $out_yesterday, PREG_SET_ORDER);
  10. //Задаем нулевые стартовые значения для того, чтобы избежать ошибок в дальнейшем
  11. $dollar_today = "";
  12. $dollar_yesterday = "";
  13. $euro_today = "";
  14. $euro_yesterday = "";

Далее, просмотрев xml-файл, знаем, что для курса доллара тэг <NumCode> - 840, а для курса евро - 978.

Находим в массиве с курсами валют значение для доллара и для евро, для текущего и предыдущего дня:

  1. foreach($out_today as $cur)
  2.   {
  3.     if($cur[2] == 840) $dollar_today = str_replace(",",".",$cur[4]);
  4.     if($cur[2] == 978) $euro_today   = str_replace(",",".",$cur[4]);
  5.   }
  6.   foreach($out_yesterday as $cur)
  7.   {
  8.     if($cur[2] == 840) $dollar_yesterday = str_replace(",",".",$cur[4]);
  9.     if($cur[2] == 978) $euro_yesterday   = str_replace(",",".",$cur[4]);
  10.   }

Разницу между курсом валют сегодня и курсом, который был вчера, считаем, как разницу между значениями:

  1. $position_usd = $dollar_today-$dollar_yesterday;
  2. $position_euro = $euro_today-$euro_yesterday;

Далее формируется html-код с расстановкой необходимых значений.

Посмотреть пример

Скачать пример

WebVisor: анализ посетителей сайта