Парсинг курса валют

В данной статье хочу познакомить читателей с основами php парсинга.

Для примера будем получать официальный курс гривны к доллару с сайта НБУ.
Данный код вы сможете использовать в дальнейшем, если вам нужно будет производить какие-либо математические операции с курсом, или просто выводить где-то на сайте.

Сначала приведу весь код, а далее – более подробные пояснения.

Php парсинг курса гривны к доллару с сайта НБУ:
// урл страницы сайта НБУ с курсами валют
$url="http://www.bank.gov.ua/control/ru/curmetal/detail/currency?period=daily";
// получаем содержимое страницы-донора в переменную
$text = file_get_contents($url); 
// разбираем содержимое с помощью регулярных выражений
preg_match('#<td class="cell_c">USD</td>.*?</tr>#is', $text, $arr);
preg_match_all('#<td class="cell_c">(.*?)</td>#is', $arr[0], $arr);
// выводим результат
echo "{$arr[1][1]} {$arr[1][0]} = <b>{$arr[1][2]}</b> UAH";

Пояснения к коду.
Строки кода 3 и 5, думаю, понятны – получаем всё содержимое страницы сайта-донора.
Далее, заходим на сайт НБУ. Нажимаем Ctrl+U (просмотр кода страницы) и находим фрагмент кода html, где выводится курс доллара.
     <tr>
          <td class="cell_c">840</td>
          <td class="cell_c">USD</td>
          <td class="cell_c">100</td>
          <td class="cell"></td>
 
          <td class="cell_c">799.3000</td>
     </tr>

Анализируем данный фрагмент. Чтобы получить значение курса нам нужно написать регулярное выражение, которое получит весь код между уникальным кодом в
строке 4: <td class="cell_c">USD</td>
и
строке 9: </tr>
preg_match('#<td class="cell_c">USD</td>.*?</tr>#is', $text, $arr);

Таким образом, в элементе массива $arr[0] будет храниться следующее значение:
Array
(
[0] => <td class="cell_c">USD</td>
<td class="cell_c">100</td>
<td class="cell"></td>

<td class="cell_c">799.3000</td>
</tr>
)

Следующим регулярным выражением получим все значения между тегами
<td class="cell_c"> и </td>:
preg_match_all('#<td class="cell_c">(.*?)</td>#is', $arr[0], $arr);

Теперь содержимое массива $arr такое:
Array
(
[0] => Array
(
[0] => <td class="cell_c">USD</td>
[1] => <td class="cell_c">100</td>
[2] => <td class="cell_c">799.3000</td>
)

[1] => Array
(
[0] => USD
[1] => 100
[2] => 799.3000
)

)

Собственно, можно считать, что курс валют уже получен. Он храниться в $arr[1][2].
А дальше делайте с ним что необходимо. Можно сформировать строку и вывести её, как я сделал в своём рабочем примере (ссылка в начале статьи).
echo "{$arr[1][1]} {$arr[1][0]} = {$arr[1][2]} UAH";

Естественно, если изменится структура страницы-донора, то нужно будет вносить изменения в код.
Аналогично можно получать и другие данные с сайтов.
Если есть какие-то вопросы – пишите в комментарии.
Теги:
парсинг, курс валют
Добавлено: 07 Апреля 2018 07:22:35 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...