首先我们需要一个天气查询的数据接口,这里我用的是极速数据(百度即可),然后申请一个免费的账号,可以找到免费的天气数据接口,当然有次数限制,不过这已经够我们个人微信公众号使用了.
然后可以查看具体的API,有如何请求数据,以及返回的数据格式(json).
还可以查看具体的代码实现,我们这里选择用java实现:
这只是测试代码,而我们需要改成我们自己想要的,比如参数里面加上城市名称,可以查询具体城市的天气情况,我们把网址提供的代码封装成一个具体的天气查询工具类:QueryWeather
public class QueryWeather {
public static final String APPKEY = "1b3dabf9081a0fa4";// 你的appkey
public static final String URL = "http://api.jisuapi.com/weather/query";//天气查询接口地址
//这个方法可以实现输入城市,返回相应的天气情况
public static String Get(String cityURl) throws Exception {
String result = null;
String url = URL + "?appkey=" + APPKEY + "&city=" + URLEncoder.encode(cityURl, "utf-8");
String weatherString = "";// 返回的数据
try {
result = HttpUtil.sendGet(url, "utf-8");//下载网站给的源码即可
JSONObject json = JSONObject.fromObject(result);
if (json.getInt("status") != 0) {//具体错误代码,可以看网站的API
System.out.println(json.getString("msg"));
weatherString += "获取发生错误,错误信息为:" + json.getString("msg");
} else {
JSONObject resultarr = json.optJSONObject("result");
String city = resultarr.getString("city");
weatherString += "城市:" + city + "\n";
String cityid = resultarr.getString("cityid");
String date = resultarr.getString("date");
String week = resultarr.getString("week");
weatherString += "时间:" + date + " " + week + "\n";
String weather = resultarr.getString("weather");
String temp = resultarr.getString("temp");
weatherString += "天气情况:" + weather + "\n当前温度:" + temp + "\n最高温度:" + temphigh + "\n最低温度:" + templow
+ "\n风向:" + winddirect + "\n风级:" + resultarr.getString("windpower") + "\n";
//还有很多代码,碍于篇幅,不在赘述,详细代码,以后我会贴出我的github地址,供大家下载交流,有问题可以公众号留言.
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return weatherString;//返回天气情况
}
下面开始我们的Servlet消息控制类:
if (MessageUtil.MESSAGE_TEXT.equals(msgType)) {
if ("1".equals(content)) {//1 回复关键字1 了解更多公众号信息!
message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.testResponse(content));
} else if ("2".equals(content)) {//2 回复关键字2 更多公众号精彩文章!
message = MessageUtil.initNewsMessage(toUserName, fromUserName);
} else if (content.contains("天气")) {//3 回复关键字城市 + 天气 例如石家庄天气
//回复的关键字需要把天气二字去掉
message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.weatherResponse(content.substring(0,content.length()-2)));
} else if ("?".equals(content) || "?".equals(content)|| "帮助".equals(content)|| "嗨".equals(content)) {
message = MessageUtil.initText(toUserName, fromUserName,MessageUtil.menuText());
}
else{//智能问答回复消息
System.out.println("智能问答:=="+content);
message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.AIResponse(content));
}
} else if (MessageUtil.MESSAGE_EVENT.equals(msgType)) {// 事件推送
String eventType = map.get("Event"); // 事件分成多种,分别判断处理
if (MessageUtil.MESSAGE_EVENT_SUBSCRIBE.equals(eventType)) { // 这里先写一个关注之后的事件
message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());
}
之后回复天气+城市名即可获得天气情况,具体更加详细的天气数据的获取,详见网站API,同时还有其它数据接口可供我们使用,同理,会使用一个接口后,其它也一样.