最近接到公司的一个小需求,需要天气数据,所以就做了一个小接口,供前端调用
这些数据包括六个元素,如降水、风、大气压力、云量和温度。有了这些,你可以分析趋势,知道明天的数据来预测天气。
1.1 工具简介
OpenWeatherMap可以访问地球上任何位置的当前天气数据! 我们收集和处理来自不同来源的天气数据,例如全球和本地天气模型、卫星、雷达和庞大的气象站网络。 数据以 JSON、XML 或 HTML 格式提供。
1.2 注册
主页右上角有注册入口 Members
1.3 申请key
注册登录后 默认会有一个key,你也可以增加key
在key的设置界面,可以做一些增删改操作
1.4 价格
https://openweathermap.org/price#weather
2.1 API 调用
# city name
https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}
# JSON
https://api.openweathermap.org/data/2.5/weather?q=London&appid={API key}
# XML
https://api.openweathermap.org/data/2.5/weather?q=London&mode=xml&appid={API key}
# Latitude & Longitude
https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}
https://api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&appid={API key}
2.2 API实战
这里直接上go可运行源码,我项目中只用到温度、湿度、气压和风速,地区设置的是深圳,其它数据可自行查阅openweathermap官方api文档获取
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type CurrentWeather struct {
Main struct {
Temp float32 `json:"temp"` // 温度
Humidity float32 `json:"humidity"` // 湿度
Pressure float32 `json:"pressure"` // 气压
} `json:"main"`
Wind struct {
Speed float32 `json:"speed"` // 风速
} `json:"wind"`
}
func main() {
// 用你的API Key替换下面的字符串
apiKey := "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
location := "shenzhen"
// 构造API URL
url := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric", location, apiKey)
// 发送HTTP GET请求
resp, err := http.Get(url)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
// 读取响应体
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response body:", err)
return
}
// 解析JSON数据
var weatherData CurrentWeather
err = json.Unmarshal(body, &weatherData)
if err != nil {
fmt.Println("Error unmarshalling JSON:", err)
return
}
fmt.Printf("weatherData: %.2f °C\n", weatherData)
// 打印获取到的数据
fmt.Printf("Temperature: %.1f °C\n", weatherData.Main.Temp)
fmt.Printf("Humidity: %.2f %%\n", weatherData.Main.Humidity)
fmt.Printf("Pressure: %.2f hPa\n", weatherData.Main.Pressure)
fmt.Printf("Wind Speed: %.1f m/s\n", weatherData.Wind.Speed)
}
运行结果