Парсер курса валют НБУ

Тема в разделе "PHP", создана пользователем notzevs, 16 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. notzevs

    notzevs Создатель

    Регистр.:
    27 сен 2009
    Сообщения:
    30
    Симпатии:
    5
    Выкладываю парсер курса валют НБУ. Возможно новичкам пригодится. Я когда-то кучу времени на это потратил))
    На сайте НБУ все немного запутано.

    PHP:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    $page11 
    file_get_contents("http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx");

    if ( 
    preg_match'#<span[^>]*>([\d\.]+)</span>#is'$page11$matches ) )
    {
       
    $date_nbu=$matches[1];
    }
    if ( 
    preg_match'#<td[^>]*>доларів США</td>\s*<td[^>]*>([\d\.]+)</td>#is'$page11$matches ) )
    {
       
    $usd=$matches[1];
       
    $usd=$usd/100;
       
    $usd=round($usd,2);
    }
    if ( 
    preg_match'#<td[^>]*>ЄВРО</td>\s*<td[^>]*>([\d\.]+)</td>#is'$page11$matches1 ) )
    {
       
    $euro=$matches1[1];
       
    $euro=$euro/100;
       
    $euro=round($euro,2);
    }
    if ( 
    preg_match'#<td[^>]*>російських рублів</td>\s*<td[^>]*>([\d\.]+)</td>#is'$page11$matches2 ) )
    {
       
    $rub=$matches2[1];
       
    $rub=$rub/10;
       
    $rub=round($rub,2);
    }
    echo 
    $date_nbu;
    echo 
    $usd;
    echo 
    $euro;
    echo 
    $rub;
    ?>
     
    Hmelex, vornic и katrukhin нравится это.
  2. Dark Wizard

    Dark Wizard

    Регистр.:
    23 сен 2007
    Сообщения:
    153
    Симпатии:
    76
    Когда-то делал курс с сайта cbr:

    Код:
    <?
       // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru  
      $content = get_content();  
      // Разбираем содержимое, при помощи регулярных выражений  
    //  $pattern = "#<Valute ID="([^"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";  
      $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 "Курс&nbsp;доллара:&nbsp;".$dollar."<br>";
      echo "Курс&nbsp;евро:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$euro;
      
      function get_content()  
      {  
        // Формируем сегодняшнюю дату  
        $datenow = date("d/m/Y");  
        // Формируем ссылку  
        $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$datenow";  
        // Загружаем HTML-страницу  
        $fd = fopen($link, "r");  
        $text="";  
        if (!$fd) echo "Запрашиваемая страница не найдена";  
        else  
        {  
          // Чтение содержимого файла в переменную $text  
          while (!feof ($fd)) $text .= fgets($fd, 4096);  
        }  
        // Закрыть открытый файловый дескриптор  
        fclose ($fd);  
        return $text;  
      } 
     ?>
    
     
    katrukhin нравится это.
  3. vornic

    vornic

    Регистр.:
    8 июн 2006
    Сообщения:
    167
    Симпатии:
    13
    Ок, тогда привнесу пользы :)
    Мой вариант парсинга курсов валют НБУ, позволяет получить любую валюту что есть в наличии в виде массива, а дальше дело вкуса:

    Код:
    <?
    $val_url = 'http://www.bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx';
    $content = file_get_contents($val_url);
    preg_match_all('#\<td align\="Center"\>(\d+)\</td\>\<td align\="Center"\>([A-Z]{3})\</td\>\<td align\="Center"\>(\d+)\</td\>\<td align\="Left"\>(.+)\</td\>\<td align\="Right"\>(\d+\.\d+)\</td\>#u', $content, $data);
    
    unset($data[0]);  // По сути просто мусор, убираем
    $data = array_values($data); // Пересобираем массив :-)
    
    /*
    Элементы массива: $data:
    0 - Числовой код валюты
    1 - Строковый код валюты
    2 - Количество единиц покупки (напр. за 100$)
    3 - Полное название валюты
    4 - Официальный курс
    */
    
    for($i = 0; $i < $val_count; $i++) {
        echo $data[2][$i].' '.$data[3][$i].' = '.$data[4][$i].' гривень <br />';
    }
    
    ?>
    
     
Статус темы:
Закрыта.