使用Springboot实现获取某个城市当天的天气预报

 更新时间:2024年04月20日 17:24:42   作者:星空下夜猫子  
这篇文章主要为大家详细介绍了使用Springboot实现获取某个城市当天的天气预报的相关知识,感兴趣的小伙伴可以跟随小编一起学习一下

获取天气信息作者是通过高德开放平台来实现的。

1、在该平台注册个账号

如已经注册,直接登录即可。

2、创建应用

创建成功后获取到key值。(注意该值会经常用到,且可以共用保存好)

3、进入开发文档选择天气查询

开发文档

下面按照说明使用即可。

接下来上代码。(注意功能接受的是JSON格式的)

4、pom.xml文件的引用

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>

5、配置文件

6、实体类

package com.zjh.weixin.Model;


import lombok.Data;

import java.util.List;

/**
 * @Author: zjh
 * @Date: 2022/9/19 11:03
 * @Description: 天气总实体
 * @Version: v1.0
 */
@Data
public class WeatherModel {
    private String status;
    private String count;
    private String nfo;
    private String infocode;
    private List<LivesModel> lives;
}

该实体为总实体(后续添加功能时,在总实体添加引用,在创建子实体)

package com.zjh.weixin.Model;

import lombok.Data;

/**
 * @Author zjh
 * @Date 2022/9/19 1053
 * @Description 天气实体类
 * @Version v1.0
 */
@Data
public class LivesModel {
    private String province;
    private String city;
    private String adcode; 
    private String weather ;
    private String temperature ;
    private String winddirection;
    private String windpower;
    private String humidity;
    private String reporttime ;
}

该类为子实体

7、根据路径获取信息

package com.zjh.weixin.Util;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSON;
import java.util.Map;

/**
 * @Author: zjh
 * @Date: 2022/9/19 10:29
 * @Description: 后端根据路径发起请求
 * @Version: v1.0
 */
public class HttpsUtil {
    /**
     * get请求
     */
    public static String get(String url){
        HttpHeaders headers = new HttpHeaders();
        MediaType mediaType = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(mediaType);
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(url, String.class);
        return result;
    }
}

8、调用方法

 public static void main(String[] args) {
        String url = "https://restapi.amap.com/v3/weather/weatherInfo?city=411400&key=b2f301************077d21";
        String s = HttpsUtil.get(url);
        System.out.println(s);
        JSONObject object = JSONObject.parseObject(s);
        WeatherModel jb = (WeatherModel)JSONObject.toJavaObject(object, WeatherModel.class);
        System.out.println(jb);
        LivesModel livesModel = jb.getLives().get(0);
        System.out.println(livesModel);
        int c =Integer.valueOf(livesModel.getTemperature());
        SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
        String currSun = dateFm.format(new Date());
        String r = null;
        if (c<=26 && c>=18){
            r="今天温度适宜";
        }else if (c>26){
            r="今天温度较高,注意防晒";
        }else if(c<18){
            r="今天温度较低,注意保暖";
        }
        String zong = "日期: "+livesModel.getReporttime()+"  "+currSun+"\n"+
                "所在城市: "+livesModel.getCity()+"\n"+
                "天气: " + livesModel.getWeather()+"\n"+
                "温度: "+ livesModel.getTemperature()+"  "+r+"\n"+
                "风向: "+ livesModel.getWinddirection()+"风"+"\n"+
                "风级: "+livesModel.getWindpower();
        System.out.println(zong);
        
    }

成功返回数据

9、项目优化

高德开放平台根据地址获取城市编码

public static String getWeather(String adcode,String key){
        String url = "https://restapi.amap.com/v3/weather/weatherInfo?city="+adcode+"&key="+key;
        String s = HttpsUtil.get(url);
        JSONObject object = JSONObject.parseObject(s);

        WeatherModel jb = (WeatherModel)JSONObject.toJavaObject(object, WeatherModel.class);
        LivesModel livesModel = jb.getLives().get(0);
        int c =Integer.valueOf(livesModel.getTemperature());
        SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
        String currSun = dateFm.format(new Date());
        String r = null;
        if (c<=26 && c>=18){
            r="今天温度适宜";
        }else if (c>26){
            r="今天温度较高,注意防晒";
        }else if(c<18){
            r="今天温度较低,注意保暖";
        }
        String zong = "日期: "+livesModel.getReporttime()+"  "+currSun+"\n"+
                "所在城市: "+livesModel.getCity()+"\n"+
                "天气: " + livesModel.getWeather()+"\n"+
                "温度: "+ livesModel.getTemperature()+"  "+r+"\n"+
                "风向: "+ livesModel.getWinddirection()+"风"+"\n"+
                "风级: "+livesModel.getWindpower();
        return zong;
    }
    private static String getCityCode(String adress,String key){
        String url = "https://restapi.amap.com/v3/geocode/geo?address="+adress+"&key="+key;
        String s = HttpsUtil.get(url);
        JSONObject object = JSONObject.parseObject(s);
        System.out.println(object);
        JSONArray array = (JSONArray) object.get("geocodes");
        JSONObject arrayObject = (JSONObject) array.get(0);
        String adcode = arrayObject.get("adcode").toString();
        return adcode;
    }

    public static void main(String[] args) {

        System.out.println(getCityCode("河南省郑州市","b2f301c36******77d21"));
        System.out.println(getWeather(getCityCode("河南省郑州市","b2f3*****7d21"),"b2f3*******7d21"));
    }

注:该功能虽说是springboot项目,但是缺失许多东西,不太完善(其主要原因是因为作者发现通过java编程实现通过用户账号发送给该用户的好友信息,只能通过Robot的自动测试功能实现微信发送消息。该方法缺点太大,不太方便,暂时未找到其他更好的方法

以上就是使用Springboot实现获取某个城市当天的天气预报的详细内容,更多关于Springboot获取天气预报的资料请关注脚本之家其它相关文章!

相关文章

  • Springboot实现图片上传功能的示例代码

    Springboot实现图片上传功能的示例代码

    本篇文章主要介绍了SpringBoot如何实现图片上传功能,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-09-09
  • 使用.NET Core3.0创建一个Windows服务的方法

    使用.NET Core3.0创建一个Windows服务的方法

    这篇文章主要介绍了使用.NET Core3.0创建一个Windows服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Java结合Vue项目打包并进行服务器部署

    Java结合Vue项目打包并进行服务器部署

    本文主要介绍了Java结合Vue项目打包并进行服务器部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java中的Redis是什么意思

    Java中的Redis是什么意思

    Redis是一个非常强大的工具,它可以用来实现很多有趣的应用,还可以使用Redis来实现分布式锁,这样你就可以在多线程或多进程的环境下同步代码,这篇文章主要介绍了Java中的Redis是什么意思,需要的朋友可以参考下
    2023-08-08
  • 深入了解Java排序算法

    深入了解Java排序算法

    本文主要介绍了深入了解Java排序算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2007-03-03
  • RocketMQ延迟消息超详细讲解

    RocketMQ延迟消息超详细讲解

    延时消息是指发送到 RocketMQ 后不会马上被消费者拉取到,而是等待固定的时间,才能被消费者拉取到。延时消息的使用场景很多,比如电商场景下关闭超时未支付的订单,某些场景下需要在固定时间后发送提示消息
    2023-02-02
  • Spring配置多个数据源并实现数据源的动态切换功能

    Spring配置多个数据源并实现数据源的动态切换功能

    这篇文章主要介绍了Spring配置多个数据源并实现数据源的动态切换功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • java中不同版本JSONObject区别小结

    java中不同版本JSONObject区别小结

    本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Java instanceof关键字的的进一步理解

    Java instanceof关键字的的进一步理解

    这篇文章主要介绍了Java instanceof关键字的的进一步理解,本文用一些实例讲解了instanceof操作符的一些知识,需要的朋友可以参考下
    2015-03-03
  • Java高级应用之斗地主游戏

    Java高级应用之斗地主游戏

    这篇文章主要为大家详细介绍了Java高级应用之斗地主游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论