PHP curl 从返回空数组的网站获取数据
PHP curl for data from website returning empty arrays
我正在尝试编写一个 Php 脚本来从 www.snowbird.com/mountain-report/ 中提取雪和其他数据,以通过 LED 阵列显示。我在获取所需数据时遇到问题。我似乎无法找到使其工作的方法。我能完成这项工作吗,还是我必须着手使用不同的语言?
下面的代码只有return空。按照代码,我将 post 什么是 returned.
<?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
(
)
您正在加载的 url 正在返回一个网页:html。
因此,当您将其视为 json 中的字符串时:
$content = json_decode($content, true);
您将 $content
设置为 null,因为当 json_decode()
无法解码字符串/输入无效 json.
时返回的内容
如果他们有 returns 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 而网站并未 return 您是 JSON 字符串。这需要删除:
$content = json_decode($content, true);
现在一切都应该如您所愿。
您尝试从中请求的网站在使用 cURL 时抛出错误,因为他们在 python 代码中实施的 google 工具在未设置用户代理时崩溃。
尝试在 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 字符串。也删除该行,您应该可以开始了。
我正在尝试编写一个 Php 脚本来从 www.snowbird.com/mountain-report/ 中提取雪和其他数据,以通过 LED 阵列显示。我在获取所需数据时遇到问题。我似乎无法找到使其工作的方法。我能完成这项工作吗,还是我必须着手使用不同的语言?
下面的代码只有return空。按照代码,我将 post 什么是 returned.
<?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
(
)
您正在加载的 url 正在返回一个网页:html。
因此,当您将其视为 json 中的字符串时:
$content = json_decode($content, true);
您将 $content
设置为 null,因为当 json_decode()
无法解码字符串/输入无效 json.
如果他们有 returns 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 而网站并未 return 您是 JSON 字符串。这需要删除:
$content = json_decode($content, true);
现在一切都应该如您所愿。
您尝试从中请求的网站在使用 cURL 时抛出错误,因为他们在 python 代码中实施的 google 工具在未设置用户代理时崩溃。
尝试在 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 字符串。也删除该行,您应该可以开始了。