В данной статье хочу познакомить читателей с основами
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";
Естественно, если изменится структура страницы-донора, то нужно будет вносить изменения в код.
Аналогично можно получать и другие данные с сайтов.
Если есть какие-то вопросы – пишите в комментарии.