今天为大家分享一个java语言编写的天气预报 空气质量查询系统,目前系统功能已经很全面,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步
开发环境
开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。
系统框架
利用JDK自带的SWING框架开发,不需要安装第三方JAR包
主要功能
1 注册API,从风和天气https://www.qweather.com/实时返回天气等数据
2 解析返回数据:对返回的JSON数据进行解析
3 Java UI对天气数据进行显示。显示最近8小时天气信息
4 用户可以根据省、市、县等 根据条件查询天气信息,查询后的天气,马上更新在主面板上
实现效果
1 主界面
程序主要一个主界面,可以采取下钻的方式显示一周的天气。先选省份、然后选城市、再选取对应的区域。然后点击查询。实时获取4小时内的天气情况。天气分半个小时显示一次。显示的天气信息包含以下些信息:时间、温度、天气类型、风力、降雨情况。所有数据都是实时抓取的,获取的数据源从https://www.qweather.com/获取。
![](https://img-blog.csdnimg.cn/img_convert/5d79ff393f4c144cf7cd7b9188284c02.jpeg)
2 代码界面
把代码从Eclipse导入后,运行Main.Java文件,出现主界面。也可以打包成JAR文件,独立运行整个程序。
![](https://img-blog.csdnimg.cn/img_convert/7c67d67e80c69a358fde8aba9d19e778.png)
主要代码
package com.weather.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.weather.model.*;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class WeatherUtil {
//用户key
private static final String key = "********";
//实时天气预报查询地址
private static final String NOW_WEATHER_URL = "https://free-api.heweather.com/s6/weather/now?";
//逐小时天气查询地址
private static final String HOURLY_WEATHER_URL = "https://free-api.heweather.com/s6/weather/hourly?";
//三天天气预报
private static final String DAILY_WEATHER_URL = "https://free-api.heweather.com/s6/weather/forecast?";
//生活指数查询地址
private static final String LIFE_STYLE_URL = "https://free-api.heweather.com/s6/weather/lifestyle?";
//返回json字符串数据
public static String getJsonStr(String url){
System.out.println("psost url:"+url);
String jsonStr = "";
try{
URL realUrl = new URL(url);
URLConnection connection = realUrl.openConnection();
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
String line;
while((line = reader.readLine()) != null){
jsonStr += line;
}
System.out.println("return result:"+jsonStr);
reader.close();
}catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
//e.printStackTrace();
System.out.println("发送GET请求出现异常!请检查网络!");
return "error";
}
return jsonStr;
}
//查询实时天气,返回Now_Weather对象
public static Now_Weather getNowWeather(String location) {
Now_Weather now_Weather = null;
StringBuilder parameters = new StringBuilder();
try {
parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String jsonStr = getJsonStr(NOW_WEATHER_URL+parameters);
String regex = "\\{\"cloud\":.*?\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(jsonStr);
String resultStr = null;
while(matcher.find()) {
resultStr = matcher.group(0);
}
//System.out.println(resultStr);
//json字符串转换成now_Weather对象
if(resultStr != null) {
JSONObject jsonObject = JSONObject.fromObject(resultStr);
now_Weather = (Now_Weather)JSONObject.toBean(jsonObject, Now_Weather.class);
}
//设置LocationAndUpdateTime
now_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
jsonStr = getJsonStr(LIFE_STYLE_URL+parameters);
regex = "\"txt\":\"(.*?)\"";
pattern = Pattern.compile(regex);
matcher = pattern.matcher(jsonStr);
while(matcher.find()) {
now_Weather.setSuggestion(matcher.group(1));
break; //只取今天的生活指数建议
}
return now_Weather;
}
//逐小时天气预报,返回List<Hourly_Weather>
public static List<Hourly_Weather> getHourlyWeathers(String location){
List<Hourly_Weather> hourly_Weathers = new ArrayList<>();
StringBuilder parameters = new StringBuilder();
try {
parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String jsonStr = getJsonStr( HOURLY_WEATHER_URL + parameters);
System.out.println("hour return:"+HOURLY_WEATHER_URL + parameters);
String regex = "\\[\\{\"cloud.*?\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(jsonStr);
String resultStr = null;
while(matcher.find()) {
resultStr = matcher.group(0);
}
if(resultStr != null) {
//System.out.println(resultStr);
JSONArray jsonArray = JSONArray.fromObject(resultStr);
//json字符串转换成对象数组
for(int i = 0; i < jsonArray.size(); i++) {
JSONObject jObject = jsonArray.getJSONObject(i);
Hourly_Weather hourly_Weather = (Hourly_Weather) JSONObject.toBean(jObject,Hourly_Weather.class);
hourly_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
hourly_Weathers.add(hourly_Weather);
}
}
return hourly_Weathers;
}
//查询三天天气预报,返回对象数组
public static List<Daily_Weather> getDailyWeathers(String location) {
List<Daily_Weather> daily_Weathers = new ArrayList<>();
StringBuilder parameters = new StringBuilder();
try {
parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String jsonStr = getJsonStr(DAILY_WEATHER_URL + parameters);
String regex = "\\[\\{\"cond_code_d.*?\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(jsonStr);
String resultStr = "";
while(matcher.find()) {
resultStr = matcher.group(0);
}
//System.out.println(resultStr3);
//json字符串转换成对象数组
if(resultStr != null) {
JSONArray jsonArray = JSONArray.fromObject(resultStr);
for(int i = 0; i < jsonArray.size(); i++) {
JSONObject jObject = jsonArray.getJSONObject(i);
Daily_Weather daily_Weather = (Daily_Weather)JSONObject.toBean(jObject,Daily_Weather.class);
daily_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
daily_Weathers.add(daily_Weather);
}
}
return daily_Weathers;
}
public static LocationAndUpdateTime getLocationAndUpdateTime(String jsonStr) {
System.out.println("json"+jsonStr);
LocationAndUpdateTime locationAndUpdateTime = null;
//匹配城市信息
String regex = "\\{\"cid\".*?\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(jsonStr);
String resultStr = "";
while(matcher.find()) {
resultStr = matcher.group(0);
}
if(resultStr.equals("")) {
return null;
}
//将最后一个大括号替换为逗号,拼接上匹配的时间,成为完整json字符串
resultStr = resultStr.substring(0, resultStr.length()-1)+",";
//匹配更新时间
regex = "\"loc\".*?\\}";
pattern = Pattern.compile(regex);
matcher = pattern.matcher(jsonStr);
while(matcher.find()) {
resultStr += matcher.group(0);
}
JSONObject jsonObject = JSONObject.fromObject(resultStr);
locationAndUpdateTime = (LocationAndUpdateTime)JSONObject.toBean(jsonObject, LocationAndUpdateTime.class);
return locationAndUpdateTime;
}
}