天天看点

springboot 集成在线天气预报

前阵子项目中遇到了需要使用接口查询天气接口,之前以为很难,后面发现贼简单,话不多说直接上代码

//    文字转译 设置时间超时
    public static final String DEF_CHATSET = "UTF-8";
    public static final int DEF_CONN_TIMEOUT = 30000; 
    public static final int DEF_READ_TIMEOUT = 30000;
//    代理商
    public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";

           

Appkey 配置 Appkey 一定是要最真实的

@Value("${forecast.appkey}")
    private String APPKEY;
           

下面是逻辑代码

public AjaxJson findForecast(String cityname) {
//        先定义一个结果
        String result =null;
        String url ="http://apis.juhe.cn/simpleWeather/query";//请求接口地址
        Map params = new HashMap();//请求参数
        params.put("city",cityname);//要查询的城市,如:温州、上海、北京
        params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
        params.put("dtype","");//返回数据的格式,xml或json,默认json

        try {
            result =net(url, params, "GET");
              } catch (Exception e) {
            e.printStackTrace();
        }
        return AjaxJson.success().put("成功",result);
    }
           
private String net(String strUrl, Map params, String method) throws Exception{
//        Object cityname = params.get("city");
//        System.out.println(cityname);
        HttpURLConnection conn = null;
        BufferedReader reader = null;
        String rs = null;
        try {
            StringBuffer sb = new StringBuffer();
            if(method==null || method.equals("GET")){
                strUrl = strUrl+"?"+urlencode(params);
//                System.out.println(strUrl);
            }
            URL url = new URL(strUrl);
            conn = (HttpURLConnection) url.openConnection();
            if(method==null || method.equals("GET")){
                conn.setRequestMethod("GET");
            }else{
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
            }
            conn.setRequestProperty("User-agent", userAgent);
            conn.setUseCaches(false);
            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
            conn.setReadTimeout(DEF_READ_TIMEOUT);
            conn.setInstanceFollowRedirects(false);
            conn.connect();
            if (params!= null && method.equals("POST")) {
                try {
                    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
                    out.writeBytes(urlencode(params));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            InputStream is = conn.getInputStream();
            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
            String strRead = null;
            while ((strRead = reader.readLine()) != null) {
                sb.append(strRead);
            }
            rs = sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
            if (conn != null) {
                conn.disconnect();
            }
        }
        return rs;
    }

           
public static String urlencode(Map<String,String> data) {
            StringBuilder sb = new StringBuilder();
            for (Map.Entry i : data.entrySet()) {
                try {
                    sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            return sb.toString();
        }

    }
           

以下是运行结果

{
  "msg": "操作成功",
  "code": 200,
  "成功": "{\"reason\":\"查询成功!\",\"result\":{\"city\":\"成都\",\"realtime\":{\"temperature\":\"6\",\"humidity\":\"93\",\"info\":\"阴\",\"wid\":\"02\",\"direct\":\"北风\",\"power\":\"2级\",\"aqi\":\"45\"},\"future\":[{\"date\":\"2020-12-03\",\"temperature\":\"4\\/6℃\",\"weather\":\"小雨转阴\",\"wid\":{\"day\":\"07\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-04\",\"temperature\":\"4\\/6℃\",\"weather\":\"阴\",\"wid\":{\"day\":\"02\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-05\",\"temperature\":\"4\\/7℃\",\"weather\":\"阴\",\"wid\":{\"day\":\"02\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-06\",\"temperature\":\"5\\/8℃\",\"weather\":\"小雨\",\"wid\":{\"day\":\"07\",\"night\":\"07\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-07\",\"temperature\":\"5\\/9℃\",\"weather\":\"小雨\",\"wid\":{\"day\":\"07\",\"night\":\"07\"},\"direct\":\"持续无风向\"}]},\"error_code\":0}",
  "success": true
}