我正试图编写一个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);
现在一切都应该按您的意愿运行。