curl в php практическое применение

Я уже публиковал несколько статей про работу c curl в php. Сегодня я продолжаю эту тему и покажу на примере одного из сайтов как можно практически применять это инструмент.

Вымышленной задачей на сегодня я будет получения погоды для г. Евпатории, с этим городом у меня много воспоминаний, поэтому выбрал именно его. «Донором» будет сайт METEOPROG.UA:Погода в Украине. Немного оглядевшись на сайте находим интересующую нас страницу: /ru/weather/Yevpatoria/.

На этой странице мы видим интересующий нас блок (см. рисунок), его мы и будем препарировать. Просмотри исходного кода страницы сразу дает нам понять, что сайт в кодировке UTF8, а разработчики заботливо выделили для нас начало блока комментариями вида: <!— begin info td —>. Если бы его не было пришлось бы искать другие точки опоры, но здесь получилось очень довольно просто.
Сам блок содержащий необходимую для нас информацию выглядит следующим образом:

<!-- begin info td -->  
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td valign=top><div class="block_header" style="color: #CC050C; padding: 12px 0px 0px 15px;"><h3 style="font-size: 16px;display:inline;">Евпатория (на 15:00 EET)</h3></div></td>
<td valign=top align=right style="font-size:22px;color:#0E64D1;padding:8px 10px 0px 0px;">6°C</td>
</tr>
</table>
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td style="padding: 5px 5px 5px 5px;"><img src="/images/weather/dull.png" width="157" height="125" border="0" alt=""></td>
<td valign=top style="padding: 0px 0px 0px 0px;width:46%;">
<table width="100%" cellspacing="1" cellpadding="1" border="0">
<tr>
<td style="padding: 0px 1px 0px 0px;" align=right>Ветер:</td>
<td><b>ЮЗ, 9 м/с</b></td>
</tr>
<tr>  
<td style="padding: 0px 1px 0px 0px;" align=right>Давление:</td>
<td><b>758 мм рт.ст.</b></td>
</tr>
<tr>    
<td style="padding: 0px 1px 0px 0px;" align=right>Влажность:</td>
<td><b>93%</b></td>
</tr>  
</table>
<div style="padding: 12px 0px 0px 0px;"></div>
<!-- begin gray corner -->

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

"|<!-- begin info td -->(.*?)<!-- begin gray corner -->|siu"

Первый вариант получается такой:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.meteoprog.ua/ru/weather/Yevpatoria/");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://www.yousoft.ru)');
$data = curl_exec($ch);
if (preg_match("|<!-- begin info td -->(.*?)<!-- begin gray corner -->|siu",$data,$res)){
	echo $res[1];
}
curl_close($ch);
?>

Проверяем, все нормально мы получили необходимый нам блок. Двигаемся дальше. Температура находиться в таблице первой строке втором столбце, опишем это так:

"|<!-- begin info td -->.*?<td.*?<td.*?>(.*?)</td>.*?<!-- begin gray corner -->|siu" 

Вставляем в предыдущий пример и проверяем. У меня работает температура получена. Следующим шагом мы получим направление и скорость ветра, ориентиром для нас будет название поля «Ветер:» и оформление самого значения:

"|<!-- begin info td -->.*?<td.*?<td.*?>(.*?)</td>.*?Ветер:.*?<td><b>(.*?)</b></td>.*?<!-- begin gray corner -->|siu".


Нужно заметить, что направление и скорость ветра попадут во второй элемент массива.
Ну, а давление и влажность оставим как домашнее задание, тем более делается оно аналогично ветру.

curl в php практическое применение: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *