Парсер курсов валют на PHP

Author Автор: Роман Чернышов    Опубликовано: 15 мая 2012

Хочу поделиться с вами некоторыми наработками в области парсинга(граббинга), в данном случае речь пойдет о парсинге курсов валют. В качестве донора мы будем рассматривать сайт ЦБРФ, т.к. он всегда поддерживает актуальные данные, всегда доступен и вообще многие сайты берут информацию о курсах именно с него.

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

Я предлагаю рассмотреть два рабочих варианта, два скрипта написанных на PHP, но работающих по разному с данными в разных форматах. Тем самым не только достичь поставленной цели, а также научится парсить HTML(разбором дерева DOM) таблицы и XML потоки.

Вариант первый, DOM, таблицы.

<?php
$date = date('d.m.Y');
$url="http://www.cbr.ru/currency_base/D_print.aspx?date_req=$date"; // URL страницы с курсами валют на сегодня
$html = file_get_contents($url); // Читаем содержимое HTML страницы
$charset = 'UTF-8'; // кодировка получаемой страницы
 
// на данном этапе, находим на в коде блок с классом header2, и все что до него удаляем, т.к. оно нам ненужно, там содержится ненужная нам информация
$pos=mb_strpos($html,'<table class="CBRTBL">', 0, $charset); // позиция
$html=mb_substr($html,$pos,mb_strlen($html, $charset), $charset); // обрезаем до указанной позиции, удаляя все лишнее
 
$dom = new domDocument; // создаем объект дерева DOM
$dom->loadHTML($html); // загружаем в него спарсенную страницу
 
$dom->preserveWhiteSpace = false;
//echo $html;
$tables = $dom->getElementsByTagName('table'); // получаем из дерева DOM первую таблицу, ею является как раз таблица содержащая курсы валют
$rows = $tables->item(0)->getElementsByTagName('tr'); // получаем из таблицы все строки
 
$i=0;
$curs = array(); // массив который будет хранить данные
foreach ($rows as $row) // беребор полученных строк
    {
	if($i==0) {$i++; continue;} // первую строку пропускаем, т.к. она содержит заголовки столбцов а не данные
        $cols = $row->getElementsByTagName('td'); // разбираем все строки по столбцам
 
 
	// записываем в полученные данные в массив, для удобного представления и работы дальше
        $curs[$i][0]=$cols->item(0)->nodeValue; // Цифр. код
        $curs[$i][1]=$cols->item(1)->nodeValue; // Букв. код 
        $curs[$i][2]=$cols->item(2)->nodeValue; // Единиц
        $curs[$i][3]=$cols->item(3)->nodeValue; // Валюта
        $curs[$i][4]=$cols->item(4)->nodeValue; // Курс
	$i++;
    }
print_r($curs);// выводим полученный массив

Вариант второй, XML.

<?php
$url = "http://www.cbr.ru/scripts/XML_daily.asp"; // URL, XML документ, всегда содержит актуальные данные
$curs = array(); // массив с данными
 
// функция полчуния даты из спарсенного XML
function get_timestamp($date)
 {
     list($d, $m, $y) = explode('.', $date);
     return mktime(0, 0, 0, $m, $d, $y);
 }
 
 
if(!$xml=simplexml_load_file($url)) die('Ошибка загрузки XML'); // загружаем полученный документ в дерево XML
$curs['date']=get_timestamp($xml->attributes()->Date); // получаем текущую дату
 
foreach($xml->Valute as $m){ // перебор всех значений
   // для примера будем получать значения курсов лишь для двух валют USD и EUR
   if($m->CharCode=="USD" || $m->CharCode=="EUR"){
    $curs[(string)$m->CharCode]=(float)str_replace(",", ".", (string)$m->Value); // запись значений в массив
   }
  }
 
print_r($curs);

Вот два простых примера как можно быстро получать всегда актуальные данные курсов валют с помощью PHP, а далее уже работать с ними в своем скрипте, сохранять в базу данных и т.д.

Разумеется таким же образом можно получать и другие не менее важные данные с других сайтов доноров.

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

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 159₽
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка