如何解决使用 JavaScript 获取 Openweather 预报
我想用 JavaScript 获取 5 天的天气预报。当我执行下面的代码时,我得到 TypeError: Cannot read property 'temp' of undefined
。如果我将 https://api.openweathermap.org/data/2.5/forecast?q=
更改为 https://api.openweathermap.org/data/2.5/weather?q=
,我将毫无错误地获得当前天气。为什么预测在我的情况下不起作用?我错过了什么吗?
JavaScript(我认为 .then(data =>
片段中存在问题):
var activities = document.getElementById('activitySelector');
var main = document.querySelector('#name');
var temp = document.querySelector('.temp');
var desc = document.querySelector('.desc');
activities.addEventListener('change',(e) => {
fetch('https://api.openweathermap.org/data/2.5/forecast?q='+e.target.value+'&appid=<<<<APIKEY>>>>&cnt=5')
.then(response => response.json())
.then(data => {
var tempValue = data['main']['temp'];
var nameValue = data['name'];
var descValue = data['weather'][0]['description'];
main.innerHTML = nameValue;
desc.innerHTML = "Desc - "+descValue;
temp.innerHTML = "Temp - "+tempValue;
})
.catch(err => alert(err));
})
HTML:
<select name="cities" id="activitySelector">
<div class="options">
<option class="option" value="warsaw">Warsaw</option>
<option class="option" value="phoenix">Phoenix</option>
<option class="option" value="berlin">Berlin</option>
</div>
</select>
<div class="container">
<div class="card">
<h1 class="name" id="name"></h1>
<p class="temp"></p>
<p class="clouds"></p>
<p class="desc"></p>
</div>
</div>
我试图获取的 JSON:
{"cod":"200","message":0,"cnt":5,"list":[{"dt":1618606800,"main":{"temp":279.45,"feels_like" :277.97,“temp_min”:278.72,“temp_max”:279.45,“压力”:1031,“海平面”:1031,“grnd_level”:1028,“湿度”:56,“temp_kf”:0.73},“天气”: [{"id":802,"main":"Clouds","description":"分散 clouds","icon":"03n"}],"clouds":{"all":25},"wind":{"speed":2.06,"deg":80,"gust":6.1},"可见性":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-04-16 21:00:00"},{"dt":1618617600,“main”:{“temp”:278.63,“feels_like”:277.46,“temp_min”:276.98,“temp_max”:278.63,“压力”:1031,“sea_level”:1031,“grnd_level”:1028,“湿度” :61,"temp_kf":1.65},"weather":[{"id":801,"description":"few clouds","icon":"02n"}],"clouds":{"all":23},"wind":{"speed":1.65,"deg":53,"gust":4.49},"dt_txt":"2021-04-17 00:00:00"},{"dt":1618628400,"main":{"temp":276.91,"feels_like":275.48,"temp_min":275.64,"temp_max":276.91,"pressure":1031,"sea_level":1031,"grnd_level":1027,"湿度":66,"temp_kf":1.27},"weather":[{"id":800,"main":"Clear","description":"清除 sky","icon":"01n"}],"clouds":{"all":10},"deg":21,"gust":4.06},"dt_txt":"2021-04-17 03:00:00"},{"dt":1618639200,"main":{"temp":275.25,"feels_like":273.27,"temp_min":275.25,"temp_max":275.25,"grnd_level":1028,"湿度":67,"temp_kf":0},"icon":"01d"}],"clouds":{"all":1},"wind":{"speed":1.89,"deg":16,"gust":4.72},"sys":{"pod":"d"},"dt_txt":"2021-04-17 06:00:00"},{"dt":1618650000,"main":{"temp":280.37,"feels_like":278.43,"temp_min":280.37,"temp_max":280.37,"pressure":1030,"sea_level":1030,"湿度":44,"clouds":{"all":2},"wind":{"speed":2.84,"deg":39,"gust":4.51},"dt_txt":"2021-04-17 09:00:00"}],"city":{"id":2643743,"name":"London","coord":{"lat":51.5085,"lon":-0.1257},"country" :"GB","population":1000000,"timezone":3600,"sunrise":1618549331,"sunset":1618599475}}
解决方法
问题只是您取消引用所需值的方式。
def hacky_tf_nanmean(a,axis):
import tensorflow as tf
return tf.math.divide_no_nan(tf.reduce_sum(tf.where(tf.math.is_finite(a),a,0.),axis=axis),tf.reduce_sum(tf.cast(tf.math.is_finite(a),tf.float32),axis=axis))
有一个属性 data
。 list
是一个对象数组,每个对象都有一个 list
键,该键指向一个带有 main
键的对象。
例如,您可以像这样获取所有元素并记录它们的 temp
字段:
main.temp
所以你有
A = Account("manfred@gmail.com","hunter2",3)
{i:getattr(A,i) for i in dir(A) if not i.startswith("_")}
{'birthday': 3,'email': 'manfred@gmail.com','password': 'hunter2'}
在文档中我看到
https://api.openweathermap.org/data/2.5/forecast?q=
所以我假设您在 URL 中缺少 /daily。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。