2015-11-10 12 views
1

我想写一个PHP脚本来从www.snowbird.com/mountain-report/拉雪和其他数据通过LED阵列显示。我在获取需要的数据方面遇到麻烦。我似乎无法找到使其工作的方法。我能做这项工作吗?还是我需要去使用另一种语言?PHP curl从网站返回空数组的数据

以下代码仅返回空白。在代码之后,我会发布返回的内容。

<?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); 
?> 

这里是输出

[email protected] /var/www $php test4.php 

Array 
(
) 
Array 
(
) 
Array 
(
) 
Array 
(
) 
Array 
(
) 

回答

2

您尝试请求的网站在使用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)不是neccesary为返回的数据将是HTML代码不是一个JSON字符串。删除该行以及你应该很好去。

+0

添加后它似乎已经改变,我会让你知道我什么时候成功找到我想要的数据。到现在为止还挺好。非常感谢你 – knilssen

2

您加载函数返回一个网页的URL:HTML。

所以,当你把它当作一个JSON字符串:

$content = json_decode($content, true); 

你将设置你的$content为null,因为这是当json_decode()不能解码的字符串返回什么/输入是不是有效的JSON。

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

+0

非常感谢你,我从我的代码以及我的问题中解决了这个问题。 – knilssen

1

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

现在一切都应该如你所愿地工作。

+0

非常感谢您一起总结!现在看起来好转了。一旦我做到了我想要的一切,我会让你知道! – knilssen

+0

一定不要忘记标记正确的答案。 – Andrius