一、前言

在当今的数字时代,天气数据在众多应用场景中扮演着至关重要的角色,从日常生活规划到复杂的商业决策。OpenWeatherMap API 作为一个强大而全面的天气数据源,为开发者提供了丰富的气象信息。

OpenWeatherMap 提供了全面的天气数据服务,包括:

  • 当前天气状况
  • 未来 1 小时的分钟级预报
  • 未来 48 小时的小时级预报
  • 未来 8 天的每日预报
  • 国家级天气预警
  • 40 多年的历史天气数据

这些数据为开发各类天气相关应用提供了坚实的基础。

二、项目实践

1.打开openweathermap官方网站

浏览器访问: https://openweathermap.org/

进行注册和登录并确认邮件

2.获取API Key

进入OpenWeatherMap官网,点击你的用户名,选择“My API keys”

SpringBoot集成OpenWeatherMapAPI获取天气_OpenWeatherMapAPI

SpringBoot集成OpenWeatherMapAPI获取天气_SpringBoot_02

3.测试APIkey是否生效

请求北京地区的天气情况:

https://api.openweathermap.org/data/2.5/weather?q=Beijing,cn&APPID=你的API-Key

正常返回格式如下:

SpringBoot集成OpenWeatherMapAPI获取天气_SpringBoot_03

注意:如果返回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);
    }

}

最后启动查询进行测试。

SpringBoot集成OpenWeatherMapAPI获取天气_SpringBoot_04

三、常见问题和解决方案

  1. API 调用限制:免费账户有调用次数限制,建议实施缓存机制。
  2. 地理编码问题:有时城市名可能不被识别,可以使用经纬度坐标代替。
  3. 数据精确度:天气预报并非 100% 准确,建议在应用中说明数据仅供参考。
  4. 网络问题:在某些地区,可能需要使用 API 代理服务来提高访问稳定性。