• 通过城市获取天气信息


    最近公司新项目首页需要实时获取天气信息,网上查资料研究了一下,通过城市名称获取天气信息。

    1、工具类:通过城市名称向中华网年历上获取天气信息,具体代码如下:

    package com.troy.emergency.gis.web.rest.util;
    
    import com.troy.emergency.gis.dto.WeatherInfo;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.*;
    import java.util.zip.GZIPInputStream;
    
    /**
     * @Author: CaoTing
     * @Description:  通过get请求向中华万年历网站http://wthrcdn.etouch.cn/weather_mini获取某个城市的天气状况数据,数据格式是Json
     * @Date: 2019/7/4
     */
    public class WeatherUtils {
        /**
         * 通过城市名称获取该城市的天气信息
         *
         * @param cityName
         * @return
         */
    
        public  static String getWeatherData(String cityName) {
            StringBuilder sb=new StringBuilder();;
            try {
                cityName = URLEncoder.encode(cityName, "UTF-8");
                String weatherRrl = "http://wthrcdn.etouch.cn/weather_mini?city="+cityName;
    //            String weatherRrl = "https://free-api.heweather.net/s6/weather/now?location="+cityName+"&key=db86a5196f304e52a4369818c5182e60";
    
                URL url = new URL(weatherRrl);
                URLConnection conn = url.openConnection();
                InputStream is = conn.getInputStream();
                GZIPInputStream gzin = new GZIPInputStream(is);
    
                // 设置读取流的编码格式,自定义编码
                InputStreamReader isr = new InputStreamReader(gzin, "utf-8");
                BufferedReader reader = new BufferedReader(isr);
                String line = null;
                while((line=reader.readLine())!=null) {
                    sb.append(line).append(" ");
                }
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb.toString();
    
        }
    
    
        /**
         * 将JSON格式数据进行解析 ,返回一个weather对象
         * @param weatherInfoByJson
         * @return
         */
        public static WeatherInfo getWeather(String weatherInfoByJson){
            JSONObject dataOfJson = JSONObject.fromObject(weatherInfoByJson);
            if(dataOfJson.getInt("status")!=1000) {
                return null;
            }
    
            //创建WeatherInfo对象,提取所需的天气信息
            WeatherInfo weatherInfo = new WeatherInfo();
    
            //从json数据中提取数据
            String data = dataOfJson.getString("data");
    
            System.out.println(data);
            dataOfJson = JSONObject.fromObject(data);
            weatherInfo.setCityName(dataOfJson.getString("city"));
            weatherInfo.setGanMao(dataOfJson.optString("ganmao"));
            weatherInfo.setTemperature(dataOfJson.optString("wendu")+"℃");
    
            //获取预测的天气预报信息
            JSONArray forecast = dataOfJson.getJSONArray("forecast");
            //取得当天的
            JSONObject result=forecast.getJSONObject(0);
            weatherInfo.setDate(result.getString("date"));
    
            String high = result.getString("high").substring(2);
            String low  = result.getString("low").substring(2);
    
            weatherInfo.setTemperatureRange(low+"~"+high);
            weatherInfo.setWeather(result.getString("type"));
    
            return weatherInfo;
        }
    }

    2、实体类,代码如下:

    package com.troy.emergency.gis.dto;
    
    import lombok.Data;
    
    /**
     * @Author: CaoTing
     * @Description: 
     * @Date: 2019/7/4
     */
    @Data
    public class WeatherInfo {
        /**
         * 时间
         */
        private String date;
    
        /**
         * 城市名
         */
        private String cityName;
    
        /**
         * 天气
         */
        private String weather;
        /**
         * 气温
         */
        private String temperatureRange;
    
        /**
         * 感冒
         */
        private String ganMao;
    
        /**
         * 当前温度
         */
        private String temperature;
    
    
        @Override
        public String toString() {
            return "WeatherInfo [date=" + date + ", cityName=" + cityName
                    + ", weather=" + weather + ", temperature=" + temperature+"]";
        }
    
    }

    3、测试类,代码如下:

    package com.troy.emergency.gis.web.rest.vm;
    
    import com.troy.emergency.gis.web.rest.util.WeatherUtils;
    
    
    public class test {
        public static void main(String[] args){
            String info = WeatherUtils.getWeatherData("成都");
            System.out.println(WeatherUtils.getWeather(info));
        }
    }

    4、输入结果,如下图所示:

  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    内部类访问局部变量的时候,为什么变量必须加上final修饰
    Web 测试经验总结
    故障测试
    智能硬件产品的测试经验总结
    web端测试和移动端测试的区别小记
    MVC模式介绍
    重定向与转发
    MySQL权限管理分配
    pt-heartbeat工具监控MySQL复制延迟
  • 原文地址:https://www.cnblogs.com/baiyuer666/p/11170135.html
Copyright © 2020-2023  润新知