PHP curl для данных с сайта, возвращающего пустые массивы

1

Я пытаюсь написать 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
simple-html-dom
domdocument

3 ответа

2
Лучший ответ

Веб-сайт, который вы пытаетесь запросить, выдает ошибку при использовании 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-строкой. Удалите эту линию, и вам должно быть хорошо идти.

  • 0
    После добавления. Похоже, что он изменился, я сообщу вам, когда мне удастся найти нужные данные. Все идет нормально. большое спасибо
2

URL-адрес, который вы загружаете, возвращает веб-страницу: html.

Поэтому, когда вы рассматриваете его как строку json в:

$content = json_decode($content, true);

Вы установите для вашего $content значение null, поскольку это то, что возвращается, когда json_decode() не может декодировать строку/вход недействителен json.

Если у них есть api, который возвращает json, вы можете использовать это, иначе вы можете оставить строку json_decode и взять ее оттуда.

  • 0
    Большое спасибо, я убрал это из своего кода, а также в своем вопросе.
1

Если вы попытались вывести переменную $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);

Теперь все должно работать так, как вы этого хотите.

  • 0
    Большое спасибо за то, что суммировали все это вместе! Кажется, сейчас работает лучше. Я дам вам знать, как только получу все, что хочу!
  • 0
    Обязательно не забудьте пометить правильный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню