PHP curl用于从网站返回空数组的数据


PHP curl for data from website returning empty arrays

我正试图编写一个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时会抛出错误,因为当没有用户代理集时,他们在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时返回的内容。

如果他们有一个返回json的api,你可以使用它,否则你可以省略json_decode行,从那里取它。

如果您在执行cURL后立即尝试输出$content变量,您会注意到网站会抛出一条巨大的错误消息。

这个错误基本上是网站期望的一些用户代理检查,而你没有提供。

如果你在做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);

现在一切都应该按您的意愿运行。