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 字符串。也删除该行,您应该可以开始了。