Java 实现天气预报
效果图
1、登录高德地图API开放平台
天气查询-API文档-开发指南-Web服务 API | 高德地图API
2、用户在高德地图官网申请web服务API类型KEY
3、天气查询
天气查询API服务地址:
URL |
https://restapi.amap.com/v3/weather/weatherInfo?parameters |
请求方式 |
GET |
parameters代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。
- 请求参数
参数名 |
含义 |
规则说明 |
是否必须 |
缺省值 |
|
---|---|---|---|---|---|
key |
请求服务权限标识 |
用户在高德地图官网申请web服务API类型KEY |
必填 |
无 |
|
city |
城市编码 |
输入城市的adcode,adcode信息可参考城市编码表 |
必填 |
无 |
|
extensions |
气象类型 |
可选值:base/all base:返回实况天气 all:返回预报天气 |
可选 |
无 |
|
output |
返回格式 |
可选值:JSON,XML |
可选 |
JSON |
- 返回结果参数说明
实况天气每小时更新多次,预报天气每天更新3次,分别在8、11、18点左右更新。由于天气数据的特殊性以及数据更新的持续性,无法确定精确的更新时间,请以接口返回数据的reporttime字段为准。天气结果对照表>>
名称 |
含义 |
规则说明 |
||
---|---|---|---|---|
status |
返回状态 |
值为0或1 1:成功;0:失败 |
||
count |
返回结果总数目 |
|||
info |
返回的状态信息 |
|||
infocode |
返回状态说明,10000代表正确 |
|||
lives |
实况天气数据信息 |
|||
province |
省份名 |
|||
city |
城市名 |
|||
adcode |
区域编码 |
|||
weather |
天气现象(汉字描述) |
|||
temperature |
实时气温,单位:摄氏度 |
|||
winddirection |
风向描述 |
|||
windpower |
风力级别,单位:级 |
|||
humidity |
空气湿度 |
|||
reporttime |
数据发布的时间 |
forecast |
预报天气信息数据 |
|||
city |
城市名称 |
|||
adcode |
城市编码 |
|||
province |
省份名称 |
|||
reporttime |
预报发布时间 |
|||
casts |
预报数据list结构,元素cast,按顺序为当天、第二天、第三天的预报数据 |
|||
date |
日期 |
|||
week |
星期几 |
|||
dayweather |
白天天气现象 |
|||
nightweather |
晚上天气现象 |
|||
daytemp |
白天温度 |
|||
nighttemp |
晚上温度 |
|||
daywind |
白天风向 |
|||
nightwind |
晚上风向 |
|||
daypower |
白天风力 |
|||
nightpower |
晚上风力 |
4、测试获取杭州天气
api:https://restapi.amap.com/v3/weather/weatherInfo?key=你的key&city=330900
5、搭建对应的数据库表,字段要与json中的一一对应
6、创建与表对应实体类
/*** TbHkhb:天气表* @author zyw* @since 2022-03-19 13:42:24*/
@Data
@ApiModel(value="天气表,对应表tb_weather",description="适用于新增和修改页面传参")
public class TbWeather extends ProBaseEntity<TbWeather> {private static final long serialVersionUID = -89506524104887138L;/*** 主键id*/@ApiModelProperty(value="主键id")private String id;/*** 日期*/@ApiModelProperty(value="日期")private Date date;/*** 星期几*/@ApiModelProperty(value="星期几")private String week;/*** 白天天气现象*/@ApiModelProperty(value="白天天气现象")private String dayweather;/*** 晚上天气现象*/@ApiModelProperty(value="晚上天气现象")private String nightweather;/*** 白天温度*/@ApiModelProperty(value="白天温度")private String daytemp;/*** 晚上温度*/@ApiModelProperty(value="晚上温度")private String nighttemp;/*** 白天风向*/@ApiModelProperty(value="白天风向")private String daywind;/*** 晚上风向*/@ApiModelProperty(value="晚上风向")private String nightwind;/*** 白天风力*/@ApiModelProperty(value="白天风力")private String daypower;/*** 晚上风力*/@ApiModelProperty(value="晚上风力")private String nightpower;}
7、编写获取天气信息的业务逻辑
主要思想:
- 获取实时时间,根据当下时间获取所需要天气预报的时间范围;
- 通过API获取JSON格式的天气数据;
- 解析JSON格式,转换为字符串,再从字符串中分解出字符数组;
- 将其中的值分割出来,赋值给对应的对象属性;
- 设置定时任务,每次存入数据库之前,清除根据时间范围清除数据库中旧的天气预报信息;
- 批量新增最新的天气预报信息
/*** TbZbzsService: 天气表 业务实现类* 开发注意:* 1. 增/删/改 方法需要进行事务注解(@Transactional);* 2. service中有异常则直接向外抛出;* @author zyw* @date 2022-03-19 13:55:31**/ @Service public class TbWeatherService extends ProBaseService<TbWeatherDao, TbWeather> {private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/*** @方法名称: getWeather* @实现功能: 获取最新的天气预报 TODO: 方法入参根据页面对象设置* @create by zyw at 2022-03-19 17:12:31**/public List<TbWeather> getWeather(){Date date = new Date();Calendar rightSmall = Calendar.getInstance();Calendar rightBig = Calendar.getInstance();rightSmall.setTime(date);rightBig.setTime(date);rightSmall.add(Calendar.DAY_OF_YEAR,-3);//日期减3天rightBig.add(Calendar.DAY_OF_YEAR,2);//日期加2天return dao.getNewWeather(rightSmall.getTime(), rightBig.getTime());}/*** @方法名称: importWeather* @实现功能: 定时存入实时天气预报 TODO: 方法入参根据页面对象设置* @create by zyw at 2022-03-19 14:04:31**/ // @Scheduled(cron = "0/3 * * * * ?") //表达式只能写6位 // @Scheduled(cron = "0 0 */1 * * ?") //每小时@Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点执行一次public void importWeather(){System.out.println("~~~~~~~~定时存入实时天气预报~~~~~~~~~~");String requestURL = "https://restapi.amap.com/v3/weather/weatherInfo?parameters&key=你的key&city=330900&extensions=all&output=JSON";HttpURLConnection conn = null;BufferedReader reader = null; //使用免费api查询天气,请求数据时需要提交的参数Map<String, String> params = new HashMap();StringBuilder stringBuilder = new StringBuilder();try {//存储返回结果String strRead = null;//开始连接URL url = new URL(requestURL);conn = (HttpURLConnection) url.openConnection();//使用Get方式请求数据conn.setRequestMethod("GET");conn.connect();//输入流获取返回数据InputStream is = conn.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));while ((strRead = reader.readLine()) != null) {stringBuilder.append(strRead);}JSONObject jsonObject = JSON.parseObject(stringBuilder.toString());String casts = (jsonObject.getJSONArray("forecasts")).toString().substring(1, (jsonObject.getJSONArray("forecasts")).toString().length() - 1);List<TbWeather> tbWeathers = JSON.parseObject((JSON.parseObject(casts)).getJSONArray("casts").toJSONString(), new TypeReference<List<TbWeather>>() {});for (TbWeather tbWeather : tbWeathers) {tbWeather.setId(UUID.randomUUID().toString().replace("-", "").substring(0, 20));tbWeather.setCreateDate(new Date());}Date date = new Date();//清除数据库中存储的旧的天气预报Calendar rightSmall = Calendar.getInstance();Calendar rightBig = Calendar.getInstance();rightSmall.setTime(date);rightBig.setTime(date);rightSmall.add(Calendar.DAY_OF_YEAR,-1);//日期减1天rightBig.add(Calendar.DAY_OF_YEAR,3);//日期加2天int dates = dao.deleteWeatherByDates(rightSmall.getTime(),rightBig.getTime());System.out.println("清除"+dates+"条旧天气数据");int i = dao.insertTbWeatherList(tbWeathers);System.out.println("添加" + i+"条天气数据");} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (conn != null) {conn.disconnect();}}} }
<!--批量新增--><insert id="insertTbWeatherList" parameterType="java.util.List">insert into tb_weather (id,date,week,dayweather,nightweather,daytemp,nighttemp,daywind,nightwind,daypower,nightpower,create_date) VALUES<foreach collection="list" item="item" separator=",">(#{item.id},#{item.date},#{item.week},#{item.dayweather},#{item.nightweather},#{item.daytemp},#{item.nighttemp},#{item.daywind},#{item.nightwind},#{item.daypower},#{item.nightpower},#{item.createDate})</foreach></insert><!-- 删除指定时间范围内的--><delete id="deleteWeatherByDates" parameterType="com.hlframe.intControl.entity.TbWeather">DELETE from tb_weatherwhere (date >= #{yesterday} and date < #{dayAfterTomorrow})</delete>
8、前端调用获取实时天气预报
获取前端所需要的时间范围,根据时间范围查找数据库中的天气预报数据
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/*** @方法名称: getWeather* @实现功能: 获取最新的天气预报 TODO: 方法入参根据页面对象设置* @create by zyw at 2022-03-19 17:12:31**/public List<TbWeather> getWeather(){Date date = new Date();Calendar rightSmall = Calendar.getInstance();Calendar rightBig = Calendar.getInstance();rightSmall.setTime(date);rightBig.setTime(date);rightSmall.add(Calendar.DAY_OF_YEAR,-3);//日期减3天rightBig.add(Calendar.DAY_OF_YEAR,2);//日期加2天return dao.getNewWeather(rightSmall.getTime(), rightBig.getTime());}
<select id="getNewWeather" resultType="com.hlframe.intControl.entity.TbWeather">select<include refid="TbHkhbColumns"/>from tb_weather a<include refid="TbHkhbJoins"/><where>date >= #{smallDate}and date <= #{bigDate}</where>order by create_date</select>
/*** @方法名称: getWeather* @实现功能: 获取实时最新天气预报, TODO: 方法入参根据页面对象设置* @return java.lang.String* @create by zyw at 2022-03-19 17:32:26**/@ApiOperation(value="获取实时最新天气预报",notes="返回全部数据后端接口",response = TbWeather.class)@PostMapping(value = "/getWeather")public String getWeather(){try {return buildResultStr(buildSuccessResultData(service.getWeather(), TbWeather.class));} catch (Exception e) {logError(log, e);return buildResultStr(buildErrorResultData(e.getMessage()));}}
9、效果图
Java 实现天气预报相关推荐
- java 获得天气预报信息
java 获得天气预报信息 最近项目中需要增加天气预报功能,网上给的资料有很多缺陷比如 1. 有些小网站提供的webservers本身就不稳定不能长期使用. 2. 还有一些网站 ...
- java调用天气预报案例
1.(出处)http://www.cnblogs.com/jason-star/archive/2012/09/25/2702032.html 2.找了老久的.终于在'天边的星星'这位仁兄的博客发现, ...
- Java开发天气预报系统
Java开发天气预报系统 2017-08-18 艳学网 点击上方"艳学网",申请加群 最新Java技术,第一时间送达! 前言 丫丫天气提供稳定.可用的天气数据API,支持国内256 ...
- java调用天气预报的webservice
更多面试题请狠狠的点击 下载 一.说明 天气预报的webService地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx (天 ...
- 利用java实现天气预报设计教程视频_java实现天气预报(解释+源代码)
[实例简介] 使用java实现的天气预报,有源代码和解释,源代码可以直接复制,运行之后是一个小程序 离国国国回图别国面图国B图程国图国国E国国E厘图国E国国图匡国目面国国田图国国国国 实用第一氵智慧密 ...
- Java做天气预报app_天气预报APP(1)
一个天气预报APP至少应该具备以下功能: *可以罗列出全国所有的省.市.县: *可以查看全国任意城市的天气信息: *可以自由的切换城市,去查看其他城市的天气: *提供手动更新以及后台自动更新天气的功能 ...
- java调用天气预报webservice
代码下载:https://download.csdn.net/download/sinat_36710456/10369688 一.说明 转载该博客中使用的天气预报的webService地址: htt ...
- java获取天气预报_使用java获取未来7天天气信息,可用于android
环境:eclipsse, jdk1.6, 没有使用第三方的包,都是JDK有的. 项目结构如下: 1.获取天气预报的类 WeatherUtil.java [java] package com.siqi. ...
- java调用天气预报api_java调用中国天气网api获得天气预报信息
以冰城哈尔滨为例 1.[代码][Java]代码 //通过中国天气api调用 private String getWeatherInfo2(){ StringBuilder info = new Str ...
最新文章
- 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器
- Linux磁盘阵列技术详解(二)--raid 1创建
- Professional WCF 4读书笔记(2)——消息交换模式
- linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...
- 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
- python怎么使用json_Python JSON的简单使用
- 为AI学术小白铺平道路,NeurIPS 2019推出New In ML2019特别会议
- Eclipse 各种快捷键
- 极速写作2017彻底卸载_如何将 Flash 从 Mac 和 Windows 系统中彻底卸载?
- java异常类型及处理
- java winhex_winhex模版
- 人工神经网络心得体会_图神经网络打卡心得体会
- ubuntu测试键盘工具_Lubuntu安装屏幕键盘onboard,使触摸屏可以登录和输入
- ModBus用户自定义文件读写功能
- 当linux reboot不成功时怎么办
- JavaScript中template模板引擎
- c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...
- 信号调制与解调python
- 深度|未来电竞产业的新“十倍空间”
- 风力发电仿真系列-基于Simulink搭建的双馈风力发电(DFIG)模型
热门文章
- 科力锐勒索拦截系统:解决勒索病毒“勒索+窃取”双重威胁的特效药!
- LinuxC++开发面试系列(二):权限修改、进程管理与vim
- 如何在 Git 中保存用户名和密码?
- 实战 | flink sql 实时 TopN
- 在计算机中将硬盘上的数据复制到u盘上称为,怎样将旧电脑所有数据(包括系统盘数据),全部复制到新电脑上?...
- java解析网页全过程_Web页面的解析过程
- 【面经】Hibernate常见面试题
- 解决typora beta版本过期提示
- 互联网公司招聘--奇虎360--技术类--2014年笔试题
- html渐变颜色填充,在画布形状中填充渐变色