Иногда на сайтах(или для сайтов) необходим курс валют. Делают его по-разному:

  • “парсят” текстовые информеры
  • “парсят” различные страницы с курсами, в том числе и “http://www.cbr.ru/currency_base/D_print.asp[?date_req={dd.mm.yy}]”(сам до некоторого времени так делал)
  • Возможно кто-то использует сервисы CBR(а у меня они перестали недавно работать – даже WSDL-валидатор ругается на методы)

И вот в поисках(в случайных) наткнулся на страницу с курсами в формате XML – “http://www.cbr.ru/scripts/XML_daily.asp[?date_req={d/m/y}]”. Поскольку в PHP5 крайне упростилась работа с оным xml-ем написал функцию для извлечения курса:

function getExchange($code = 'USD') {        
    $valutes = array('USD' => 'R01235','EUR' => 'R01239');
    // если нужно - можно добавить код монгольского тугрика... 
    $code = strtoupper($code); 
    if (!in_array($code,array_keys($valutes))) { 
     // неизвестный(нафикненужный) код валюты 
        return false; 
     } else {
        $idValute = $valutes[$code]; 
        $dom = new DomDocument; // создаём DOM-дерево
        $dom->load(getXML()); 
      //функция getXML у меня просто возвращает строку с содержимым XML-ки, адрес которой написан выше, и по возможности "дёргает" её не с сервера cbr, а из "локального кеша". 
        $xpath = new DOMXPath($dom); 
         // создаём XPath-объект 
        $query = '//ValCurs/Valute[@ID="'.$idValute.'"]/Value';
         //вся прелесть и простота открывается именно в этом хитром выражении XPath 
        $entries = $xpath->query($query); 
          // выполняем "наихитрейшее" выражение 
        $result = $entries->item(0)->nodeValue; 
          // и имеем необходимый результат (внимание - он в строковом представлении - при необходимости манипулировать им в вычислительных процессах лучше сделать явный cast во float) 
        return $result; 
    } 
} 

P.S.
Купив у нас php, Вы бесплатно получаете массу дополнительных модулей призванных облегчить Вам жизнь, увеличить потенцию и уменьшить счета за горячую воду и сэкономить уйму времени на составление регулярных выражений.

Получение курса валют (CBR)

Leave a Reply