在Web开发中使用和风天气接口

介绍

和风天气是一个提供全球天气预报和气象数据的服务平台,支持多种语言,提供实时天气、未来天气预报、空气质量指数、生活建议等多种气象数据,可以广泛用于网页开发、移动应用和物联网设备等场景。

开发文档:文档 | 和风天气开发服务

快速开始

首先注册账号,然后在控制台中创建项目,可以选择免费订阅或按量计费两种订阅模式,然后可以为项目设置第一个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数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值