一、前言
在当今的数字时代,天气数据在众多应用场景中扮演着至关重要的角色,从日常生活规划到复杂的商业决策。OpenWeatherMap API 作为一个强大而全面的天气数据源,为开发者提供了丰富的气象信息。
OpenWeatherMap 提供了全面的天气数据服务,包括:
- 当前天气状况
- 未来 1 小时的分钟级预报
- 未来 48 小时的小时级预报
- 未来 8 天的每日预报
- 国家级天气预警
- 40 多年的历史天气数据
这些数据为开发各类天气相关应用提供了坚实的基础。
二、项目实践
1.打开openweathermap官方网站
浏览器访问: https://openweathermap.org/
进行注册和登录并确认邮件
2.获取API Key
进入OpenWeatherMap官网,点击你的用户名,选择“My API keys”
3.测试APIkey是否生效
请求北京地区的天气情况:
https://api.openweathermap.org/data/2.5/weather?q=Beijing,cn&APPID=你的API-Key
正常返回格式如下:
注意:如果返回401,请不要惊慌,因为API Key会过一会儿生效,时间一般在一小时内
4.在SpringBoot中集成使用
注册RestTemplate
package com.example.dataproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableAsync
@EnableScheduling
public class DataProjectApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(DataProjectApplication.class, args);
}
}
创建服务类
package com.example.dataproject.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* @author qx
* @date 2024/9/12
* @des
*/
@Service
public class WeatherService {
@Autowired
private RestTemplate restTemplate;
public String getWeatherData(String city) {
String url = "https://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=your_key";
return restTemplate.getForObject(url, String.class);
}
}
接下来创建控制层进行访问
package com.example.dataproject.controller;
import com.example.dataproject.service.WeatherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author qx
* @date 2024/9/12
* @des
*/
@RestController
public class WeatherController {
@Autowired
private WeatherService weatherService;
@GetMapping("/getWeather")
public String getData(String city) {
return weatherService.getWeatherData(city);
}
}
最后启动查询进行测试。
三、常见问题和解决方案
- API 调用限制:免费账户有调用次数限制,建议实施缓存机制。
- 地理编码问题:有时城市名可能不被识别,可以使用经纬度坐标代替。
- 数据精确度:天气预报并非 100% 准确,建议在应用中说明数据仅供参考。
- 网络问题:在某些地区,可能需要使用 API 代理服务来提高访问稳定性。