2015-11-09 3 views
1

Я пытаюсь написать скрипт PHP, чтобы вытащить снег и другие данные из http://www.snowbird.com/mountain-report для отображения через светодиодную матрицу. У меня возникают проблемы с получением необходимых мне данных. Кажется, я не могу найти способ заставить его работать. Я читал о том, что PHP не лучший инструмент для этого? Смогу ли я сделать эту работу, или мне придется идти и использовать другой язык? Вот код, который, как мне кажется, не работает.Как извлечь данные из HTML

<?php 
include_once('simple_html_dom.php'); 


// create curl resource 
$ch = curl_init(); 
// set url 
curl_setopt($ch, CURLOPT_URL, "http://www.snowbird.com/mountain-report/"); 
//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// $output contains the output string 
$output = curl_exec($ch); 
// close curl resource to free up system resources 
curl_close($ch); 


$output = ($output); 

$html = new DOMDocument(); 
$html = loadhtml($content); 

$ret1 = $html->find('div[id=twelve-hour]'); 
print_r ($ret1); 
$ret2 = $html->find('#twenty-four-hour'); 
print_r ($ret2); 
$ret3 = $html->find('#forty-eight-hour'); 
print_r ($ret3); 
$ret4 = $html->find('#current-depth'); 
print_r ($ret4); 
$ret5 = $html->find('#year-to-date'); 
print_r ($ret5); 
?> 
+0

Пожалуйста, расскажите нам, что случилось с этим кодом. –

+0

Что вы получаете, когда запускаете это? –

+0

Запуск этого я получаю PHP Неустранимая ошибка: вызов неопределенной функции loadhtml() в /var/www/test3.php в строке 20 – knilssen

ответ

0

Это древний вопрос, но достаточно легко дать ему ответ. Используйте XPath query, чтобы получить правильное текстовое значение узла. (Это должно быть так же просто, как прохождение URL непосредственно DOMDocument::loadHTMLFile() но сервер запрашивает на основе агента пользователя, поэтому мы должны подделать.)

<?php 

$ctx = stream_context_create(["http"=>[ 
    "user_agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0" 
]]); 
$html = file_get_contents("http://www.snowbird.com/mountain-report/", true, $ctx); 
libxml_use_internal_errors(true); 
$doc = new DOMDocument; 
$doc->loadHTML($html, LIBXML_NOWARNING|LIBXML_NOERROR); 
$xp = new DomXpath($doc); 
$root = $doc->getElementById("snowfall"); 

$snowfall = [ 
    "12hour" => $xp->query("div[@id='twelve-hour']/div[@class='total-inches']/text()", $root)->item(0)->textContent, 
    "24hour" => $xp->query("div[@id='twenty-four-hour']/div[@class='total-inches']/text()", $root)->item(0)->textContent, 
    "48hour" => $xp->query("div[@id='forty-eight-hour']/div[@class='total-inches']/text()", $root)->item(0)->textContent, 
    "current" => $xp->query("div[@id='current-depth']/div[@class='total-inches']/text()", $root)->item(0)->textContent, 
    "ytd" => $xp->query("div[@id='year-to-date']/div[@class='total-inches']/text()", $root)->item(0)->textContent, 
]; 

print_r($snowfall); 
Смежные вопросы