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

接口地址:http://apis.juhe.cn/simpleWeather/query

返回格式:json

请求方式:http get/post

请求示例:http://apis.juhe.cn/simpleWeather/query?city=%E8%8B%8F%E5%B7%9E&key=

接口备注:通过城市名称或城市ID查询天气预报情况

请求参数说明:

名称必填类型说明
citystring要查询的城市名称/id,城市名称如:温州、上海、北京,需要utf8 urlencode
keystring在个人中心->我的数据,接口名称上方查看

返回参数说明:

名称类型说明
error_codeint返回码,0为查询成功
reasonstring返回说明
resultstring返回结果集
---
realtime-当前天气详情情况
infostring天气情况,如:晴、多云
widstring天气标识id,可参考小接口2
temperaturestring温度,可能为空
humiditystring湿度,可能为空
directstring风向,可能为空
powerstring风力,可能为空
aqistring空气质量指数,可能为空
---
future-近5天天气情况
datestring日期
temperaturestring温度,最低温/最高温
weatherstring天气情况
directstring风向

JSON返回示例:

{
    "reason": "查询成功",
    "result": {
        "city": "苏州",
        "realtime": {
            "temperature": "4",
            "humidity": "82",
            "info": "阴",
            "wid": "02",
            "direct": "西北风",
            "power": "3级",
            "aqi": "80"
        },
        "future": [
            {
                "date": "2019-02-22",
                "temperature": "1/7℃",
                "weather": "小雨转多云",
                "wid": {
                    "day": "07",
                    "night": "01"
                },
                "direct": "北风转西北风"
            },
            {
                "date": "2019-02-23",
                "temperature": "2/11℃",
                "weather": "多云转阴",
                "wid": {
                    "day": "01",
                    "night": "02"
                },
                "direct": "北风转东北风"
            },
            {
                "date": "2019-02-24",
                "temperature": "6/12℃",
                "weather": "多云",
                "wid": {
                    "day": "01",
                    "night": "01"
                },
                "direct": "东北风转北风"
            },
            {
                "date": "2019-02-25",
                "temperature": "5/12℃",
                "weather": "小雨转多云",
                "wid": {
                    "day": "07",
                    "night": "01"
                },
                "direct": "东北风"
            },
            {
                "date": "2019-02-26",
                "temperature": "5/11℃",
                "weather": "多云转小雨",
                "wid": {
                    "day": "01",
                    "night": "07"
                },
                "direct": "东北风"
            }
        ]
    },
    "error_code": 0
}

1、开通接口

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

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

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 class SimpleWeather {
    // 天气情况查询接口地址
    public static String API_URL = "http://apis.juhe.cn/simpleWeather/query";
    // 接口请求Key
    public static String API_KEY = "xxxxxxxxxxxxxx";

    public static void main(String[] args) {
        String cityName = "北京";
        queryWeather(cityName);
    }

    /**
     * 根据城市名查询天气情况
     *
     * @param cityName
     */
    public static void queryWeather(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请求
     *
     * @param httpUrl 请求地址
     * @return 返回结果
     */
    public static String doGet(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型转为请求参数型
     *
     * @param data
     * @return
     */
    public static String urlencode(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;
    }
}
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 基于Java Swing的天气预报是一个基于桌面应用程序的设计,可提供用户实时的天气信息。首先,我们需要使用Java Swing库来创建一个图形界面窗口,包括菜单栏、按钮和文本框等组件。 接下来,我们需要通过网络请求从天气API获取天气数据。可以使用Java中的HttpURLConnection类来发送HTTP请求,并解析返回的JSON数据。可以选择一些常用的天气API,比如阿里云天气API或和风天气API,这些API提供了全球范围的天气数据。 在界面上,我们可以设置一个输入框,让用户输入城市名称,然后通过按钮触发获取天气数据的操作。在获取到数据后,我们需要解析JSON数据,并将相关的天气信息显示在界面上,包括温度、天气状况、风力等等。 为了美化界面,我们还可以使用Java Swing提供的样式和布局管理器来使界面更具吸引力。可以选择合适的字体、颜色、背景等进行设计,同时可以使用布局管理器来自动调整界面的大小和位置。 最后,为了保证应用程序的稳定性和用户体验,我们可以添加一些错误处理机制,比如网络连接失败时的提示信息或者缓存机制,以便在下次无法连接到网络时仍然能够显示上一次的天气信息。 总之,基于Java Swing的天气预报可以提供实时的天气信息并具有友好的用户界面。通过合理的设计和优化,可以使得应用程序具备良好的性能和用户体验。 ### 回答2: 基于Java Swing的天气预报是一个通过界面展示当前和未来几天的天气数据的应用程序。开发这样一个程序需要使用Java Swing库来创建用户界面,并通过天气API获取实时和未来预报的天气数据。以下是一个基本的实现思路: 1. 首先,需要创建一个主界面窗口,使用Swing组件来设计用户界面。可以添加标签、文本框、按钮等来显示天气信息,并提供输入框用于用户输入城市名称或经纬度坐标。 2. 在用户输入城市后,可以通过天气API获取该城市的实时天气数据。可以使用Java的网络编程库(如HttpURLConnection或HttpClient)来发送请求,并解析返回的JSON数据。从JSON数据中提取出需要的天气信息,如温度、湿度、风向等,并显示在界面上。 3. 同样的方法可以用于获取未来几天的天气预报数据。可以选择一个合适的天气API,根据城市和日期等参数发送请求,获取未来几天的天气数据。将数据解析后显示在界面上。 4. 为了提供更好的用户体验,可以添加一些额外的功能。比如添加自动定位功能,根据用户的IP地址或GPS信息自动获取当前位置的天气数据。另外,可以添加一个搜索历史记录功能,将用户查询的城市保存下来,方便后续查询。 5. 最后,为了使界面更美观,可以使用Swing的图形绘制功能,绘制一些天气图标或气象动画,使界面更加生动。 总结起来,基于Java Swing的天气预报应用程序主要涉及使用Swing库创建用户界面、与天气API进行数据交互、解析JSON数据并展示在界面上。通过添加一些额外的功能和图形绘制,可以增强用户体验。 ### 回答3: 基于Java Swing的天气预报系统可以通过以下步骤实现: 首先,需要获取天气预报的数据。可以通过使用API来获取实时天气数据,例如中国天气网的API。通过发送HTTP请求,并解析返回的JSON数据,我们可以获得城市的天气信息,如温度、湿度、风力等。 接下来,在Swing界面中设计一个用户界面。可以创建一个窗口,在窗口中添加标签、文本框、按钮等组件,来展示天气信息。可以设置一个文本框,让用户输入城市名或选择城市进行查询。还可以提供一个按钮,点击后触发查询天气的功能。 然后,编写逻辑代码来处理用户输入和查询天气信息。当用户点击查询按钮时,可以获取用户输入的城市名,并将其作为参数发送给API,获取到对应城市的天气数据。然后,将获取到的天气数据解析,并将其展示在界面上的相应标签或文本框中。 为了使天气预报界面更加美观和用户友好,可以为不同的天气状态设置不同的图标,如晴天、多云、雨天等。可以根据天气数据中的天气状况字段,来设置不同的图标,并显示在界面中。 最后,需要考虑增加一些额外功能,如添加城市收藏、天气分享等。可以提供一个收藏按钮,点击后将用户查询的城市添加到收藏列表中,以便用户方便查看已添加的城市天气。还可以提供一个分享按钮,点击后将当前城市的天气信息分享给其他人,可以通过邮件或者社交媒体分享。 综上所述,基于Java Swing的天气预报系统可以通过与天气API进行数据交互,并在Swing界面中展示和处理天气信息。用户可以输入城市名,查询并显示该城市的实时天气情况,还可以享受其他附加功能来提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会理财的程序员不是好摄影师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值