Я пытаюсь написать PHP скрипт, чтобы вытащить снег и другие данные из www.snowbird.com/mountain-report/, чтобы отобразить их с помощью массива led. У меня возникают проблемы с получением необходимых мне данных. Кажется, я не могу найти способ заставить его работать. Смогу ли я сделать эту работу, или мне придется идти и использовать другой язык?
Следующий код возвращается только пустым. После кода я опубликую, что возвращается.
<?php
require('simple_html_dom.php');
$ch = curl_init("http://www.snowbird.com/mountain-report/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);
$html = new simple_html_dom();
$html->load($content);
$ret1 = $html->find('.snowfall-total');
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);
?>
Вот результат
pi@KPi /var/www $php test4.php
Array
(
)
Array
(
)
Array
(
)
Array
(
)
Array
(
)
Веб-сайт, который вы пытаетесь запросить, выдает ошибку при использовании cURL, потому что инструменты Google, которые они реализовали в своём краш-коде Python, когда пользовательский агент не установлен.
Попробуйте добавить эту строку в свой код до curl_exec($ch)
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
И, как сказал @jeroen, использование json_decode($content, true)
не обязательно, так как возвращаемые данные будут HTML-кодом, а не json-строкой. Удалите эту линию, и вам должно быть хорошо идти.
URL-адрес, который вы загружаете, возвращает веб-страницу: html.
Поэтому, когда вы рассматриваете его как строку json в:
$content = json_decode($content, true);
Вы установите для вашего $content
значение null, поскольку это то, что возвращается, когда json_decode()
не может декодировать строку/вход недействителен json.
Если у них есть api, который возвращает json, вы можете использовать это, иначе вы можете оставить строку json_decode
и взять ее оттуда.
Если вы попытались вывести переменную $content
сразу после выполнения cURL, вы заметите, что на веб-сайте выдается огромное сообщение об ошибке.
Ошибка заключается в том, что в основном пользовательский агент проверяет, что веб-сайт ожидает, что вы не предоставляете.
Если вы вставляете это, прежде чем выполнять curl_exec()
, вы получите контент правильно:
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
С учетом сказанного вы все равно ничего не получите, потому что пытаетесь декодировать JSON, пока веб-сайт не возвращает вам строку JSON. Это необходимо удалить:
$content = json_decode($content, true);
Теперь все должно работать так, как вы этого хотите.