我正在尝试使用openweather API查找7天天气预报,但当我调用openweather API时,当前位置的数据不会到来,有人能指导我找到正确的API来获取当前位置的天气预报吗。
API目前已使用
1. api.openweathermap.org/data/2.5/forecast?q={city name}&appid={API key}
2. https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude={part}&appid={API key}
参考链接:
- https://openweathermap.org/forecast5
- https://openweathermap.org/api/one-call-api
请求:https://api.openweathermap.org/data/2.5/forecast?q=India&appid={MY_API_ID}
响应:(仅添加了40天中的2天数据(
{
"cod": "200",
"message": 0,
"cnt": 40,
"list": [
{
"dt": 1600668000,
"main": {
"temp": 283.42,
"feels_like": 282.81,
"temp_min": 283.42,
"temp_max": 284.26,
"pressure": 1018,
"sea_level": 1018,
"grnd_level": 862,
"humidity": 84,
"temp_kf": -0.84
},
"weather": [
{
"id": 802,
"main": "Clouds",
"description": "scattered clouds",
"icon": "03d"
}
],
"clouds": {
"all": 32
},
"wind": {
"speed": 0.1,
"deg": 22
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2020-09-21 06:00:00"
},
{
"dt": 1600722000,
"main": {
"temp": 283.34,
"feels_like": 282.29,
"temp_min": 283.34,
"temp_max": 283.34,
"pressure": 1016,
"sea_level": 1016,
"grnd_level": 861,
"humidity": 86,
"temp_kf": 0
},
"weather": [
{
"id": 500,
"main": "Rain",
"description": "light rain",
"icon": "10n"
}
],
"clouds": {
"all": 66
},
"wind": {
"speed": 0.82,
"deg": 149
},
"visibility": 823,
"pop": 0.35,
"rain": {
"3h": 0.18
},
"sys": {
"pod": "n"
},
"dt_txt": "2020-09-21 21:00:00"
}
],
"city": {
"id": 3168508,
"name": "Innichen",
"coord": {
"lat": 46.7406,
"lon": 12.2797
},
"country": "IT",
"population": 3107,
"timezone": 7200,
"sunrise": 1600664205,
"sunset": 1600708262
}
}
您有很多问题,如果您能缩小它们的范围会很有帮助。但这是我尽我所能提供帮助的最佳机会:
对于7天预报,您需要请求7天预报。
在请求1. api.openweathermap.org/data/2.5/forecast?q={city name}&appid={API key}
的示例中,您还包含了一个链接,该链接用于5天的请求如果你想要7天,那就成问题了。
如果你想要一个5天的预测,你在第一个例子中引用的API需要一个城市名称,并且(如果你想要包括一个国家(它要求国家名称在ISO 3166中,所以印度将是;IND";而不是印度。
无论你想要5天还是7天,你都需要比印度更具体。
如果是5天,您将需要一个城市名称。对于孟买的5天预测,你可以使用你在第一个例子中尝试的API,如下所示:
"https://api.openweathermap.org/data/2.5/forecast?q=mumbai&appid={yourAPIKey}"
在7天的情况下,您将需要纬度和经度坐标
对于孟买的7天预测,您可以使用您在第二个示例中尝试的API,如下所示:
//includes lat and long for mumbai
"https://api.openweathermap.org/data/2.5/onecall?lat=19.0760&lon=72.8777&appid={yourAPIkey}"
我希望这能回答你的问题。
对于7天的预测,您必须将lat-long和api id传递到以下url
"https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&appid=${api}">
要获得搜索城市的lat-long,可以先创建一个到下面url的api调用,然后使用该数据传递到上面url。https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${api}
希望这对你有帮助。一种尝试的方法。
//获取lat-long:
const getData = async () => {
let city = document.getElementById("cityName").value; //input from user.
let url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${api}`;
try {
let res = await fetch(url);
let data = await res.json();
let lat = data.coord.lat;
let lon = data.coord.lon;
getDatafor7days(lat, lon);
} catch (error) {
console.log(error);
}
};
//通过latlong获得7天预报:
const getDatafor7days = async (lat, lon) => {
let url = `https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&appid=${api}`;
try {
let res = await fetch(url);
let data = await res.json();
console.log("data", data);
} catch (error) {
console.log(error);
}
};