效果图

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、编写获取天气信息的业务逻辑

主要思想:

  1. 获取实时时间,根据当下时间获取所需要天气预报的时间范围;
  2. 通过API获取JSON格式的天气数据;
  3. 解析JSON格式,转换为字符串,再从字符串中分解出字符数组;
  4. 将其中的值分割出来,赋值给对应的对象属性;
  5. 设置定时任务,每次存入数据库之前,清除根据时间范围清除数据库中旧的天气预报信息;
  6. 批量新增最新的天气预报信息
    /*** 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 &gt;= #{yesterday} and date &lt; #{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 &gt;= #{smallDate}and date &lt;= #{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 实现天气预报相关推荐

  1. java 获得天气预报信息

    java 获得天气预报信息 最近项目中需要增加天气预报功能,网上给的资料有很多缺陷比如 1.       有些小网站提供的webservers本身就不稳定不能长期使用. 2.       还有一些网站 ...

  2. java调用天气预报案例

    1.(出处)http://www.cnblogs.com/jason-star/archive/2012/09/25/2702032.html 2.找了老久的.终于在'天边的星星'这位仁兄的博客发现, ...

  3. Java开发天气预报系统

    Java开发天气预报系统 2017-08-18 艳学网 点击上方"艳学网",申请加群 最新Java技术,第一时间送达! 前言 丫丫天气提供稳定.可用的天气数据API,支持国内256 ...

  4. java调用天气预报的webservice

    更多面试题请狠狠的点击 下载 一.说明 天气预报的webService地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx (天 ...

  5. 利用java实现天气预报设计教程视频_java实现天气预报(解释+源代码)

    [实例简介] 使用java实现的天气预报,有源代码和解释,源代码可以直接复制,运行之后是一个小程序 离国国国回图别国面图国B图程国图国国E国国E厘图国E国国图匡国目面国国田图国国国国 实用第一氵智慧密 ...

  6. Java做天气预报app_天气预报APP(1)

    一个天气预报APP至少应该具备以下功能: *可以罗列出全国所有的省.市.县: *可以查看全国任意城市的天气信息: *可以自由的切换城市,去查看其他城市的天气: *提供手动更新以及后台自动更新天气的功能 ...

  7. java调用天气预报webservice

    代码下载:https://download.csdn.net/download/sinat_36710456/10369688 一.说明 转载该博客中使用的天气预报的webService地址: htt ...

  8. java获取天气预报_使用java获取未来7天天气信息,可用于android

    环境:eclipsse, jdk1.6, 没有使用第三方的包,都是JDK有的. 项目结构如下: 1.获取天气预报的类 WeatherUtil.java [java] package com.siqi. ...

  9. java调用天气预报api_java调用中国天气网api获得天气预报信息

    以冰城哈尔滨为例 1.[代码][Java]代码 //通过中国天气api调用 private String getWeatherInfo2(){ StringBuilder info = new Str ...

最新文章

  1. 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器
  2. Linux磁盘阵列技术详解(二)--raid 1创建
  3. Professional WCF 4读书笔记(2)——消息交换模式
  4. linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...
  5. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
  6. python怎么使用json_Python JSON的简单使用
  7. 为AI学术小白铺平道路,NeurIPS 2019推出New In ML2019特别会议
  8. Eclipse 各种快捷键
  9. 极速写作2017彻底卸载_如何将 Flash 从 Mac 和 Windows 系统中彻底卸载?
  10. java异常类型及处理
  11. java winhex_winhex模版
  12. 人工神经网络心得体会_图神经网络打卡心得体会
  13. ubuntu测试键盘工具_Lubuntu安装屏幕键盘onboard,使触摸屏可以登录和输入
  14. ModBus用户自定义文件读写功能
  15. 当linux reboot不成功时怎么办
  16. JavaScript中template模板引擎
  17. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...
  18. 信号调制与解调python
  19. 深度|未来电竞产业的新“十倍空间”
  20. 风力发电仿真系列-基于Simulink搭建的双馈风力发电(DFIG)模型

热门文章

  1. 科力锐勒索拦截系统:解决勒索病毒“勒索+窃取”双重威胁的特效药!
  2. LinuxC++开发面试系列(二):权限修改、进程管理与vim
  3. 如何在 Git 中保存用户名和密码?
  4. 实战 | flink sql 实时 TopN
  5. 在计算机中将硬盘上的数据复制到u盘上称为,怎样将旧电脑所有数据(包括系统盘数据),全部复制到新电脑上?...
  6. java解析网页全过程_Web页面的解析过程
  7. 【面经】Hibernate常见面试题
  8. 解决typora beta版本过期提示
  9. 互联网公司招聘--奇虎360--技术类--2014年笔试题
  10. html渐变颜色填充,在画布形状中填充渐变色