php - OpenWeatherMap - 从 JSON 获取预报数据
问题描述
我正在尝试使用我在网站上找到的代码通过 Openweathermap API 获取天气预报,但我没有得到任何输出。这是函数的内容:
$city="Rivanazzano";
$country="IT";
$url="http://api.openweathermap.org/data/2.5/forecast/daily?q=".$city.",".$country."&units=metric&cnt=7&lang=it&appid=MY_API_KEY";
$json=file_get_contents($url);
$data=json_decode($json,true);
$HTML ="<p>";
foreach($data['list'] as $day => $value) {
$HTML .="Max temperature for day " . $day . " will be " . $value['temp']['max'] . "<br />" ;
}
$HTML .="</p>";
return $HTML;
但正如我所说,我无法获取数据,我认为问题在于 API 返回给我的 JSON 的结构与讨论中报告的结构不同。JSON是这样的:
Array
[city] => Array
(
[id] => 3169258
[name] => Rivanazzano
[coord] => Array
(
[lon] => 9.0142
[lat] => 44.9308
)
[country] => IT
[population] => 4429
)
[cod] => 200
[message] => 1.5395815
[cnt] => 7
[list] => Array
(
[0] => Array
(
[dt] => 1550401200
[temp] => Array
(
[day] => 9.69
[min] => -1.23
[max] => 9.69
[night] => -1.23
[eve] => 3.5
[morn] => 9.69
)
[pressure] => 1015.56
[humidity] => 71
[weather] => Array
(
[0] => Array
(
[id] => 800
[main] => Clear
[description] => cielo sereno
[icon] => 01d
)
)
[speed] => 1.38
[deg] => 320
[clouds] => 0
)
[1] => Array
(
[dt] => 1550487600
[temp] => Array
(
[day] => 10.84
[min] => -1.13
[max] => 12.03
[night] => -0.04
[eve] => 5.93
[morn] => -1.13
)
[pressure] => 1014.43
[humidity] => 89
[weather] => Array
(
[0] => Array
(
[id] => 800
[main] => Clear
[description] => cielo sereno
[icon] => 01d
)
)
[speed] => 1.62
[deg] => 268
[clouds] => 0
)
[2] => Array
(
[dt] => 1550574000
[temp] => Array
(
[day] => 10.63
[min] => -1.57
[max] => 11.46
[night] => 2.31
[eve] => 6.16
[morn] => -1.57
)
[pressure] => 1012.78
[humidity] => 88
[weather] => Array
(
[0] => Array
(
[id] => 800
[main] => Clear
[description] => cielo sereno
[icon] => 01d
)
)
[speed] => 1.81
[deg] => 279
[clouds] => 0
)
[3] => Array
(
[dt] => 1550660400
[temp] => Array
(
[day] => 9.83
[min] => 0.13
[max] => 10.78
[night] => 0.5
[eve] => 5.54
[morn] => 0.13
)
[pressure] => 1014.53
[humidity] => 93
[weather] => Array
(
[0] => Array
(
[id] => 500
[main] => Rain
[description] => pioggia leggera
[icon] => 10d
)
)
[speed] => 1.92
[deg] => 347
[clouds] => 8
)
[4] => Array
(
[dt] => 1550746800
[temp] => Array
(
[day] => 9.9
[min] => 5.78
[max] => 9.9
[night] => 6.69
[eve] => 8.44
[morn] => 5.78
)
[pressure] => 1014.1
[humidity] => 0
[weather] => Array
(
[0] => Array
(
[id] => 500
[main] => Rain
[description] => pioggia leggera
[icon] => 10d
)
)
[speed] => 1.83
[deg] => 349
[clouds] => 29
[rain] => 1.1
)
[5] => Array
(
[dt] => 1550833200
[temp] => Array
(
[day] => 8.59
[min] => 3.21
[max] => 8.59
[night] => 3.21
[eve] => 6.54
[morn] => 5.17
)
[pressure] => 1016.34
[humidity] => 0
[weather] => Array
(
[0] => Array
(
[id] => 500
[main] => Rain
[description] => pioggia leggera
[icon] => 10d
)
)
[speed] => 6.51
[deg] => 81
[clouds] => 84
)
[6] => Array
(
[dt] => 1550919600
[temp] => Array
(
[day] => 6.75
[min] => 1.46
[max] => 6.75
[night] => 1.46
[eve] => 4.99
[morn] => 2.09
)
[pressure] => 1019.49
[humidity] => 0
[weather] => Array
(
[0] => Array
(
[id] => 500
[main] => Rain
[description] => pioggia leggera
[icon] => 10d
)
)
[speed] => 3.98
[deg] => 54
[clouds] => 19
[rain] => 1.14
)
)
有人能帮我吗?
解决方案
让我们试试吧。我希望它对你有帮助。
$city = 'Dhaka';
$country = 'BD';
$url = 'http://api.openweathermap.org/data/2.5/forecast/daily?q=' . $city . ',' . $country . '&units=metric&cnt=7&lang=en&appid=c0c4a4b4047b97ebc5948ac9c48c0559';
$json = file_get_contents( $url );
$data = json_decode( $json, true );
$data['city']['name'];
// var_dump($data );
foreach ( $data['list'] as $day => $value ) {
echo 'Max temperature for day ' . $day
. ' will be ' . $value['temp']['max'] . '<br />';
echo '<img src="http://openweathermap.org/img/w/' . $value['weather'][0]['icon'] . '.png" class="weather-icon" />';
}
推荐阅读
- ssrs-2012 - 当行变得基于隐藏的 exp - SSRS 时,父子组给出空白行
- postgresql - HibernateException:实例的标识符已从 Alert@62794582 更改为 Alert@c82ad22
- c# - UI Unity 错误:请求的操作导致堆栈溢出
- firebase - 基于设置为对象的文档字段内的布尔值进行查询
- jquery - 如何选择包含孩子的父母有带有特定网址的href标签
- node.js - 将 Postgres 与新创建的 React 应用程序一起使用时出错:找不到模块:无法解析“dns”
- sql - CTE 优化
- android - WifiManager startScan() 仅第一次工作
- c++ - 在 c++ 中分配像 int a[10][10] 这样的数组和使用 new 关键字分配数组有什么区别?
- xamarin - 如何证明我的 Xamarin.iOS Watch 应用已启用位码?