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

Статус
В этой теме нельзя размещать новые ответы.

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;
?>
 
Когда-то делал курс с сайта 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;  
  } 
 ?>
 
Ок, тогда привнесу пользы :)
Мой вариант парсинга курсов валют НБУ, позволяет получить любую валюту что есть в наличии в виде массива, а дальше дело вкуса:

Код:
<?
$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 />';
}

?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху