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

news/2024/9/24 2:08:10/

介绍

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

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

快速开始

首先注册账号,然后在控制台中创建项目,可以选择免费订阅或按量计费两种订阅模式,然后可以为项目设置第一个KEY,KEY是获取和风天气开发服务的密钥,可以在Web、iOS、Android三种平台中进行选择:

在这里插入图片描述

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

在这里插入图片描述

在浏览器中输入下列API地址(将KEY替换成自己创建的KEY)就可以获得北京市的实时天气数据。(此处使用的免费订阅)

https://devapi.qweather.com/v7/weather/now?location=101010100&key=你的KEY

查询得到数据如下:
在这里插入图片描述

简单使用

以开发文档中的城市搜索功能为例。

后端用其它方式得到目标位置的经纬度后,向API发送 Get 请求:

java">//注意:请求参数包括必选和可选参数,如不填写可选参数将使用其默认值,参数之间使用&进行分隔。
//具体参数要求查阅开发文档。
//城市搜索请求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 对象,然后返回给前端:

java">@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 ,用于获取响应数据:

java">@Configuration
public class WebConfiguration {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

在业务层中创建方法,该方法可以将 Gzip 压缩之后的字节数组解压并解析为 JSON 对象:

java">    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;}}

该方法在开发中的具体使用:

java">//先依赖注入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数据。


http://www.ppmy.cn/news/1529598.html

相关文章

Semaphore UI --Ansible webui

1、安装python python下载地址 https://www.python.org/downloads/ 选好版本下载 wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz安装编译工具 sudo dnf groupinstall "Development Tools"安装依赖包 dnf install bzip2-devel ncurses-deve…

问题——IMX6UL的uboot无法ping主机或Ubuntu

主要描述可能的方向&#xff0c;不涉具体过程&#xff0c;详细操作可以查阅网上相关教程 跟随正点原子教程测试以太网端口时&#xff0c;即便按照步骤多次尝试也无法ping通&#xff0c;后补充了些许网络工程基础知识解决了这个问题。 uboot无法ping主机或Ubuntu有多种可能&…

C++语言设计期末考试知识点

C语言设计期末考试知识点 1. 基础语法 变量和数据类型&#xff1a; int, float, double, char, bool 等基本数据类型。常量&#xff1a;const 关键字。变量的作用域&#xff1a;局部变量、全局变量。 输入输出&#xff1a; cin 和 cout&#xff1a;标准输入输出流。格式化输出…

中间件:maxwell、canal

文章目录 1、底层原理&#xff1a;基于mysql的bin log日志实现的&#xff1a;把自己伪装成slave2、bin log 日志有三种模式&#xff1a;2.1、statement模式&#xff1a;2.2、row模式&#xff1a;2.3、mixed模式&#xff1a; 3、maxwell只支持 row 模式&#xff1a;4、maxwell介…

PHP、Java等其他语言转Go时选择GoFly快速快速开发框架指南

概要 经过一年多的发展GoFly快速开发框架已被一千多家科技企业或开发者用于项目开发&#xff0c;它的简单易学得到其他语言转Go首选框架。且企业版的发展为GoFly社区提供资金&#xff0c;这使得GoFly快速框架得到良好的发展&#xff0c;GoFly技术团队加大投入反哺科技企业和开…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Mysql集群

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建Mysql集群 MySQL 集群是一种高可用性、高性能的数据库解决方案&#xff0c;旨在支持分布式应用程序&#xff0c;允许多个 MySQL 实例以集群的方式共同工作&#xff0c;提供数据冗余和故障恢复能力 搭建Mysql集群…

如何进入电脑BIOS

前言 在日常使用电脑的过程中&#xff0c;有时我们需要进入BIOS&#xff08;基本输入输出系统&#xff09;来调整设置&#xff0c;比如更改启动顺序、调整系统日期时间或是优化硬件配置。BIOS是计算机启动时最先运行的程序之一&#xff0c;它位于主板上的一个ROM芯片中。下面&…

简单接口自动化框架实现(Python+requests+pytest)

1、接口自动化流程 1.需求分析2.挑选需要做自动化测试的功能3.设计测试用例4.搭建自动化测试环境[可选]5.设计自动化测试项目的架构[可选]6.编写代码7.执行测试用例8.生成测试报告并分析结果 2、框架结构 --api -->封装请求 --scripts -->编写测试脚本…