专栏首页浩Coding微信个人公众号开发--(4)Java实现天气查询功能

微信个人公众号开发--(4)Java实现天气查询功能

首先我们需要一个天气查询的数据接口,这里我用的是极速数据(百度即可),然后申请一个免费的账号,可以找到免费的天气数据接口,当然有次数限制,不过这已经够我们个人微信公众号使用了.

然后可以查看具体的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,同时还有其它数据接口可供我们使用,同理,会使用一个接口后,其它也一样.

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为Django网站添加favicon.ico图标

    默认情况下,浏览器访问一个网站的时候,同时还会向服务器请求"/favicon.ico"这个URL,目的是获取网站的图标。

    菲宇
  • 解决django项目部署到nginx+uwsgi服务器admin后台样式消失的问题

    版权声明:@路飞哈 https://blog.csdn.net/qq_42571805/ar...

    菲宇
  • Why UI correction note always has a big static size

    A simple tool to calculate the total size of a BSP application Some more techni...

    Jerry Wang
  • OpenVINO开发教程之八 – 道路分割

    基于OpenVINO预训练模块中的道路分割模型,实现像素级别的图像分割,把像素划分为如下四个类别

    OpenCV学堂
  • 去除inline-block元素间间距的解决方法

    上面的demo效果,明显的可以看出,在inline-block的元素之间存在“4px”的空白:

    飞奔去旅行
  • 赠书福利 | Github项目推荐 | NetworKit - 大规模网络高性能分析工具集

    NetworKit - NetworKit is a growing open-source toolkit for large-scale network a...

    AI研习社
  • [C++11札记]: std::function

    在C/C++中函数指针作为一种回调机制被广泛使用,但是函数指针在C++面向对象编程中有些不足,比如无法捕捉上下文。举个例子,使用对象的非静态成员函数作为函数指针...

    acoolgiser
  • MFC编程入门之五(MFC消息映射机制概述)

    在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。 比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息...

    acoolgiser
  • Java程序员干货学习笔记—Spring结合MyBatis实现数据库读写分离

    随着系统用户访问量的不断增加,数据库的频繁访问将成为我们系统的一大瓶颈之一。由于项目前期用户量不大,我们实现单一的数据库就能完成。但是后期单一的数据库根本无法支...

    慕容千语
  • Android程序中,内嵌ELF可执行文件--Android开发C语言混合编程总结

    都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统。跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持...

    俺踏月色而来

扫码关注云+社区

领取腾讯云代金券