基于JAVA的免费天气预报接口查询

今天主要分享一下篇如何基于JAVA对聚合数据平台的天气接口,进行查询:

1、开通接口

天气预报接口服务使用的聚合数据提供的免费接口,免费会员每天可以100次免费调用。可以通过https://www.juhe.cn/docs/api/id/73注册及开通。

2、通过Java发起城市天气查询

package cn.juhe;import net.sf.json.JSONObject;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.nio.charset.StandardCharsets;import java.util.HashMap;import java.util.Map;public classSimpleWeather{

    // 天气情况查询接口地址    public static String API_URL = "http://apis.juhe.cn/simpleWeather/query";

    // 接口请求Key    public static String API_KEY = "xxxxxxxxxxxxxx";

    publicstaticvoidmain(String[] args){

        String cityName = "北京";

        queryWeather(cityName);

    }

    /**    * 根据城市名查询天气情况    *    *@paramcityName    */    publicstaticvoidqueryWeather(String cityName){

        Map<String, Object> params = new HashMap<>();//组合参数        params.put("city", cityName);

        params.put("key", API_KEY);

        String queryParams = urlencode(params);

        String response = doGet(API_URL, queryParams);

        try {

            JSONObject jsonObject = JSONObject.fromObject(response);

            int error_code = jsonObject.getInt("error_code");

            if (error_code == 0) {

                System.out.println("调用接口成功");

                JSONObject result = jsonObject.getJSONObject("result");

                JSONObject realtime = result.getJSONObject("realtime");

                System.out.printf("城市:%s%n", result.getString("city"));

                System.out.printf("天气:%s%n", realtime.getString("info"));

                System.out.printf("温度:%s%n", realtime.getString("temperature"));

                System.out.printf("湿度:%s%n", realtime.getString("humidity"));

                System.out.printf("风向:%s%n", realtime.getString("direct"));

                System.out.printf("风力:%s%n", realtime.getString("power"));

                System.out.printf("空气质量:%s%n", realtime.getString("aqi"));

            } else {

                System.out.println("调用接口失败:" + jsonObject.getString("reason"));

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    /**    * get方式的http请求    *    *@paramhttpUrl 请求地址    *@return返回结果    */    publicstaticStringdoGet(String httpUrl, String queryParams){

        HttpURLConnection connection = null;

        InputStream inputStream = null;

        BufferedReader bufferedReader = null;

        String result = null;// 返回结果字符串        try {

            // 创建远程url连接对象            URL url = new URL(new StringBuffer(httpUrl).append("?").append(queryParams).toString());

            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类            connection = (HttpURLConnection) url.openConnection();

            // 设置连接方式:get            connection.setRequestMethod("GET");

            // 设置连接主机服务器的超时时间:15000毫秒            connection.setConnectTimeout(5000);

            // 设置读取远程返回的数据时间:60000毫秒            connection.setReadTimeout(6000);

            // 发送请求            connection.connect();

            // 通过connection连接,获取输入流            if (connection.getResponseCode() == 200) {

                inputStream = connection.getInputStream();

                // 封装输入流,并指定字符集                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

                // 存放数据                StringBuilder sbf = new StringBuilder();

                String temp;

                while ((temp = bufferedReader.readLine()) != null) {

                    sbf.append(temp);

                    sbf.append(System.getProperty("line.separator"));

                }

                result = sbf.toString();

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            // 关闭资源            if (null != bufferedReader) {

                try {

                    bufferedReader.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (null != inputStream) {

                try {

                    inputStream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (connection != null) {

                connection.disconnect();// 关闭远程连接            }

        }

        return result;

    }

    /**    * 将map型转为请求参数型    *    *@paramdata    *@return*/    publicstaticStringurlencode(Map<String, ?> data){

        StringBuilder sb = new StringBuilder();

        for (Map.Entry<String, ?> i : data.entrySet()) {

            try {

                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");

            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();

            }

        }

        String result = sb.toString();

        result = result.substring(0, result.lastIndexOf("&"));

        return result;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容