导入
当前天气数据
学习如何获取特定位置的实时天气数据。
该API可提供全球任意位置的实时天气数据。这些位置涵盖全球超过20万个城市。该API从多个数据源收集并处理天气信息,包括本地和全球气象模型、卫星、雷达以及广泛的气象站网络。我们可以通过JSON、XML和HTML格式获取此API的数据。
获取实时天气数据
我们通过向以下URI发送GET请求,来获取指定位置的实时天气数据:
https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={APP_ID}
请求参数
| 参数 | 类型 | 必需性 | 描述 |
|---|---|---|---|
| APP_ID | 字符串 | 必需 | 我们的唯一API密钥。 |
| lat | 十进制数 | 必需 | 位置的纬度。 |
| lon | 十进制数 | 必需 | 位置的经度。 |
| mode | 字符串 | 可选 | 指定API响应的格式,默认值为json,其他可选值为xml和html。 |
| units | 字符串 | 可选 | 指定测量单位,默认值为standard(标准单位),其他可选值为metric(摄氏度)和imperial(华氏度)。 |
| lang | 字符串 | 可选 | 用于指定返回结果的语言。 |
第16–17行: 我们输入47.6038321和-122.3300624,分别对应美国西雅图的地理坐标。
第19–23行: 我们可以将上表中列出的其他可选参数添加到queryParameters对象中,以进一步优化查询结果。
注意: 如需了解如何根据城市名称获取其地理坐标(纬度和经度),请参阅地理编码 API 的相关文档。
运行下方代码,查看输出结果。
1// 在此处导入库 2import fetch from "node-fetch"; 3 4// 在此处定义APP ID 5const APP_ID = '{{APP_ID}}'; 6 7// 在此处定义端点URL 8const url = new URL(`https://api.openweathermap.org/data/2.5/weather`); 9 10// 在此处定义请求头参数 11const headerParameters = { 12 contentType: 'application/json', 13}; 14 15// 在此处定义查询参数 16const lat = 47.6038321; 17const lon = -122.3300624; 18 19const queryParameters = new URLSearchParams({ 20 lat: lat.toString(), 21 lon: lon.toString(), 22 appid: APP_ID 23}); 24 25// 设置API调用选项 26const options = { 27 method: 'GET', 28 headers: headerParameters, 29}; 30 31// 定义发起API调用的函数 32async function getCurrentWeather() { 33 try { 34 url.search = queryParameters; 35 const response = await fetch(url, options); 36 37 // 自定义函数,用于打印API响应 38 printResponse(response); 39 } catch (error) { 40 // 自定义函数,用于打印错误信息 41 printError(error); 42 } 43} 44 45// 调用函数执行API请求 46getCurrentWeather();
让我们快速浏览一下上方小工具中的代码:
- 第8行: 我们定义了实时天气数据接口的URL。
- 第32–43行: 我们定义了一个自定义函数
getCurrentWeather(),使用fetch发起API请求,并处理可能出现的异常。printResponse()和printError()是用于打印API响应和错误信息的自定义函数。 - 第46行: 我们调用了
getCurrentWeather()函数。
上述代码的输出将显示指定地理坐标的地点的实时天气数据。
响应字段
下面我们深入分析此接口返回的字段内容。
| 字段 | 类型 | 描述 |
|---|---|---|
| coord.lat | 十进制数 | 该位置的纬度。 |
| coord.lon | 十进制数 | 该位置的经度。 |
| weather.id | 整数 | 天气状况的唯一标识ID。 |
| weather.main | 字符串 | 天气状况的分类组。示例值包括Clear(晴朗)、Rain(降雨)、Snow(降雪)和Extreme(极端天气)。 |
| weather.description | 字符串 | 天气状况的描述文本。 |
| weather.icon | 字符串 | 天气图标标识ID。 |
| main.temp | 十进制数 | 实际气温。默认单位为开尔文(Kelvin),metric单位为摄氏度(Celsius),imperial单位为华氏度(Fahrenheit)。 |
| main.feels_like | 十进制数 | 体感温度。默认单位为开尔文(Kelvin),metric单位为摄氏度(Celsius),imperial单位为华氏度(Fahrenheit)。 |
| main.pressure | 整数 | 海平面标准大气压,单位为百帕(hPa)。 |
| main.humidity | 整数 | 湿度百分比,单位为%。 |
| visibility | 整数 | 平均能见度,单位为米(m)。 |
| wind.speed | 十进制数 | 风速。默认和metric单位为米/秒(m/s),imperial单位为英里/小时(mph)。 |
| clouds.all | 整数 | 云量百分比,单位为%。 |
| rain.1h | 整数 | 过去一小时内降雨量,单位为毫米(mm)。该值可能为NULL。 |
| snow.1h | 整数 | 过去一小时内降雪量,单位为毫米(mm)。该值可能为NULL。 |
| dt | 整数 | 数据计算的时间戳,单位为Unix时间(UTC)。 |
| sys.sunrise | 整数 | 日出时间,单位为Unix时间(UTC)。 |
| sys.sunset | 整数 | 日落时间,单位为Unix时间(UTC)。 |
| id | 整数 | 城市的唯一标识ID。 |
| name | 字符串 | 城市名称。 |