doujing1858 2016-05-06 22:49
浏览 32
已采纳

如何使用JSON Data从OpenWeatherMap获得7天预测? [重复]

This question already has an answer here:

I'm trying to make a Weather application. I know how to fetch the current conditions, but honestly I don't know too much JSON. I have no idea how to fetch the 7-day forecast from OpenWeatherMap. I've tried pretty much everything I can think of, but nothing is working. I'm trying to fetch it from PHP. I really don't get how it works, honestly. If anybody could help, that would be appreciated.

I put ['city']['name']; just as an example.

My PHP code:

<?php
$city="London";
$country="UK"; 
$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'];
?>

Here is the JSON data:

"city":{
"id":2643743,
"name":"London",
"coord":{
"lon":-0.12574,
"lat":51.50853
},
"country":"GB",
"population":0
},
"cod":"200",
"message":0.0132,
"cnt":7,
"list":[
{
"dt":1462532400,
"temp":{
"day":15.49,
"min":13.16,
"max":15.49,
"night":13.16,
"eve":15.49,
"morn":15.49
},
"pressure":1015.77,
"humidity":50,
"weather":[
{
"id":802,
"main":"Clouds",
"description":"scattered clouds",
"icon":"03n"
}
],
"speed":4.47,
"deg":116,
"clouds":48
},
{
"dt":1462618800,
"temp":{
"day":23.03,
"min":13.57,
"max":23.03,
"night":15.77,
"eve":21.37,
"morn":13.57
},
"pressure":1015.43,
"humidity":50,
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04d"
}
],
"speed":4.43,
"deg":127,
"clouds":56
},
{
"dt":1462705200,
"temp":{
"day":24.2,
"min":16.14,
"max":24.53,
"night":18.32,
"eve":23.58,
"morn":16.14
},
"pressure":1016.42,
"humidity":42,
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04d"
}
],
"speed":7.22,
"deg":121,
"clouds":68
},
{
"dt":1462791600,
"temp":{
"day":23.4,
"min":17.51,
"max":23.59,
"night":18.36,
"eve":22.42,
"morn":17.51
},
"pressure":1017.75,
"humidity":49,
"weather":[
{
"id":800,
"main":"Clear",
"description":"clear sky",
"icon":"02d"
}
],
"speed":8.36,
"deg":106,
"clouds":8
},
{
"dt":1462878000,
"temp":{
"day":22.79,
"min":16.59,
"max":22.88,
"night":17.15,
"eve":21.54,
"morn":16.59
},
"pressure":1013.95,
"humidity":50,
"weather":[
{
"id":802,
"main":"Clouds",
"description":"scattered clouds",
"icon":"03d"
}
],
"speed":8.53,
"deg":89,
"clouds":36
},
{
"dt":1462964400,
"temp":{
"day":19.18,
"min":13.92,
"max":19.18,
"night":14.57,
"eve":18.88,
"morn":13.92
},
"pressure":1004.19,
"humidity":0,
"weather":[
{
"id":500,
"main":"Rain",
"description":"light rain",
"icon":"10d"
}
],
"speed":3.24,
"deg":180,
"clouds":22,
"rain":2.13
},
{
"dt":1463050800,
"temp":{
"day":14.84,
"min":8.83,
"max":14.84,
"night":8.83,
"eve":12.92,
"morn":12.53
},
"pressure":1005.56,
"humidity":0,
"weather":[
{
"id":500,
"main":"Rain",
"description":"light rain",
"icon":"10d"
}
],
"speed":4.14,
"deg":325,
"clouds":73,
"rain":2.86
}
]
}

Sorry if this is a really dumb question, but any help would be appreciated, thanks!

</div>
  • 写回答

1条回答 默认 最新

  • dorflv5944 2016-05-07 01:22
    关注

    So you are actually getting the information for the next 6 days. look at the complete array do an

    print_r($data);
    

    As you can see at the complete result theres the 6 days, for example:

    [5] => Array
                (
                    [dt] => 1462964400
                    [temp] => Array
                        (
                            [day] => 19.18
                            [min] => 13.92
                            [max] => 19.18
                            [night] => 14.57
                            [eve] => 18.88
                            [morn] => 13.92
                        )
    
                    [pressure] => 1004.19
                    [humidity] => 0
                    [weather] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 500
                                    [main] => Rain
                                    [description] => light rain
                                    [icon] => 10d
                                )
    
                        )
    
                    [speed] => 3.24
                    [deg] => 180
                    [clouds] => 22
                    [rain] => 2.13
                )
    

    So what you need to do is a foreach

    foreach($data['list'] as $day => $value) {
      echo "Max temperature for day " . $day . " will be " . $value[temp][max] . "<br />" ;
    }
    

    This will return:

    Max temperature for day 0 will be 21.87
    Max temperature for day 1 will be 23.03
    Max temperature for day 2 will be 24.53
    Max temperature for day 3 will be 23.59
    Max temperature for day 4 will be 22.88
    Max temperature for day 5 will be 19.18
    Max temperature for day 6 will be 14.84
    

    Hope this helps!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作