失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java: 聚合数据API接口调用城市天气预报

Java: 聚合数据API接口调用城市天气预报

时间:2024-04-26 15:02:06

相关推荐

Java: 聚合数据API接口调用城市天气预报

Java: 聚合数据API接口调用城市天气预报

点击进入【数据聚合_数据接口调用_开发者数据API开放平台】(官网)

在pom文件中,加入依赖

<!--返回json数据--><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.2.3</version><classifier>jdk15</classifier></dependency>

SimpleWeather.java

import net.sf.json.JSONObject;import java.io.*;import .HttpURLConnection;import .URL;import .URLEncoder;import java.nio.charset.StandardCharsets;import java.util.HashMap;import java.util.Map;public class SimpleWeather {// 天气情况查询接口地址public static String API_URL = "/simpleWeather/query";// 接口请求Keypublic static String API_KEY = "108f91d439908e5d2da86cc8881dd3db";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();// 设置连接方式:getconnection.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;}}

启动程序,出现如下效果

如果觉得《Java: 聚合数据API接口调用城市天气预报》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。