使用接口获取天气

public static String getWeather(String city) throws MalformedURLException, IOException {
	String cityName=URLEncoder.encode(city,"UTF-8");//城市名
	String url="//这里写你调用的天气接口,例如心知api,聚合api 有免费的天气接口";
	URLConnection con=  new URL(url).openConnection();
	con.connect();
	InputStream in=con.getInputStream();
	BufferedReader reader=new BufferedReader(new InputStreamReader(in,"UTF-8"));
	String line=null;
	StringBuffer stringB=new StringBuffer();
	while((line=reader.readLine())!=null) {
		stringB.append(line);
	}
	return stringB.toString();//这里返回接口传来的json信息
	}
//如果是做程序或者网页需要用到这个工具类,最好用数据库把一个城市的天气存起来。(最好直接把返回的json信息存到库中)这样同一个城市的多个用户就不用频繁调用接口。充当缓存的作用!减少调用。当超过一定时间再向数据库更新天气。(毕竟接口调用次数有限)
 

例如 数据库存四个字段  city(主键)  weather(直接把接口返回的天气信息存进去 text类型) updatatime(记录更新的时间) gap(时间间隔) 当调用接口的时间和数据库中的updatime之差超过gap 就会调用接口,再把当前的时间和天气信息存入库中。这样就可以起到一个缓存作用,同一城市,无论当前用户多少,只要在时间范围内,请求天气都是直接从数据库中获取天气信息,而不是请求接口,这样就可以节省接口调用次数!


public static String updata(String cityname) throws Exception {
String city=cityname;
ResultSet rs=null;
PreparedStatement pt=null;
DBUtil.connect();
pt=DBUtil.getPrepStmt("SELECT * FROM weatherupdata where cityname=?");
pt.setString(1, city);
rs=pt.executeQuery();

if(rs.next()) {

//当超过一定期限再把新的天气更新到库中,否则直接返回数据库中存的天气信息,即可减少调用

if((System.currentTimeMillis() - rs.getLong(3)) / 1000 / 60 > rs.getInt(4)) {
pt = DBUtil.getPrepStmt("UPDATE weatherupdata set jsondata=?,updatetime=? where cityname=?");
String jsondata=WeatherTest.getWeather(city);
pt.setString(1, jsondata);
pt.setLong(2, System.currentTimeMillis());
pt.setString(3, city);
pt.executeUpdate();
return jsondata;
}
else {
return rs.getString(2);
}
}else {
String jsondata=WeatherTest.getWeather(city);
pt=DBUtil.getPrepStmt("INSERT INTO weatherupdata(cityname,jsondata,updatetime) " + "VALUES(?,?,?)");
pt.setString(1, city);
pt.setString(2, jsondata);
pt.setLong(3, System.currentTimeMillis());
pt.executeUpdate();
return jsondata;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值