介绍
和风天气是一个提供全球天气预报和气象数据的服务平台,支持多种语言,提供实时天气、未来天气预报、空气质量指数、生活建议等多种气象数据,可以广泛用于网页开发、移动应用和物联网设备等场景。
开发文档:文档 | 和风天气开发服务
快速开始
首先注册账号,然后在控制台中创建项目,可以选择免费订阅或按量计费两种订阅模式,然后可以为项目设置第一个KEY,KEY是获取和风天气开发服务的密钥,可以在Web、iOS、Android三种平台中进行选择:

创建完成之后,在项目管理中可以查看或创建Key:

在浏览器中输入下列API地址(将KEY替换成自己创建的KEY)就可以获得北京市的实时天气数据。(此处使用的免费订阅)
https://devapi.qweather.com/v7/weather/now?location=101010100&key=你的KEY
查询得到数据如下:
 
简单使用
以开发文档中的城市搜索功能为例。
后端用其它方式得到目标位置的经纬度后,向API发送 Get 请求:
//注意:请求参数包括必选和可选参数,如不填写可选参数将使用其默认值,参数之间使用&进行分隔。
//具体参数要求查阅开发文档。
//城市搜索请求URL:https://geoapi.qweather.com/v2/city/lookup?{查询参数}
JSONObject geo = this.decompressStringTOJson(restTemplate.getForObject(
"https://geoapi.qweather.com/v2/city/lookup?" +"location=" + longitude 
+ "," + latitude +"&key=yourKEY", byte[].class));
接收并解压数据后将得到的JSON数据存入 vo 对象,然后返回给前端:
@GetMapping("/weather")
//接收前端传递的经纬度数据
public RestBean<WeatherVO> weather(double longitude, double latitude) {
    //使用业务层中封装好的方法,请求并解压数据,最后存入vo对象
	WeatherVO vo = weatherService.fetchWeather(longitude, latitude);
    //成功则将vo对象返回给前端
	return RestBean.success(vo);
}
前端接收到数据后直接使用即可:
 

 最后效果如下:
 
图标使用
和风天气图标 (qweather.com)
使用 npm 快速在项目中安装图标:
npm i qweather-icons
使用之前还需要引入CSS样式表:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/qweather-icons@1.6.0/font/qweather-icons.css">
在图标库中找到想要的图标,直接复制使用即可,例:
<i class="qi-100"></i>
Gzip压缩
和风天气的Web API默认采用Gzip进行压缩,因此在后端需要专门进行解压以处理数据。
首先在配置文件中配置 RestTemplate ,用于获取响应数据:
@Configuration
public class WebConfiguration {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
在业务层中创建方法,该方法可以将 Gzip 压缩之后的字节数组解压并解析为 JSON 对象:
    private JSONObject decompressStringTOJson(byte[] data) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
            //GZIP输入流,用于解压
            GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(data));
            byte[] buffer = new byte[1024];
            int read;
            //读取数据写入输出流
            while ((read = gzip.read(buffer)) != -1) {
                stream.write(buffer, 0, read);
            }
            gzip.close();
            stream.close();
            // 将解压后的数据转换为JSONObject并返回
            return JSONObject.parseObject(stream.toString());
        } catch (IOException e) {
            return null;
        }
    }
该方法在开发中的具体使用:
//先依赖注入RestTemplate
@Resource
RestTemplate restTemplate;
//调用该方法,并使用RestTemplate中的getForObject方法向和风天气API发送GET请求,并告知返回值为GZIP压缩后的byte数组。
//用JSONObject接收解压后的数据
JSONObject now = this.decompressStringTOJson(restTemplate.getForObject(
"https://devapi.qweather.com/v7/weather/now?location=" + id 
+ "&key=yourKEY", byte[].class));
最后就能得到解压后的JSON数据。













![[Redis][数据类型]详细讲解](https://i-blog.csdnimg.cn/direct/1ea047a7aa75456187bca97d21d470a9.png)





