微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的api进行回复即可。我使用的茉莉机器人,官网地址如下:
http://www.itpk.cn/
茉莉机器人的api:http://www.itpk.cn/robot.php
接口比较简单,看看就会,我直接上源代码
下面代码同样基于之前的微博,需要的可以去看一下:
http://blog.csdn.net/zxxz5201314/article/details/76917107
首先对用户发送的文本进行处理,特殊字段分别处理,同样Post请求:

@SuppressWarnings("rawtypes")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubreq.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");PrintWriter writer = resp.getWriter();try {Map<String, String> map = MessageUtil.xmlToMap(req);String toUserName = map.get("ToUserName");String fromUserName = map.get("FromUserName");String msgType = map.get("MsgType");String content = map.get("Content");System.out.println(toUserName+fromUserName+msgType+content);String text = null;if ("text".equals(msgType)) {switch (content) {case "笑话":Map maps1 = (Map)JSON.parse(ITPK.itpk("笑话"));StringBuffer sb1 = new StringBuffer();sb1.append("标题:"+maps1.get("title")+"\n");sb1.append("内容:"+maps1.get("content"));text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, sb1.toString());break;case "观音灵签":Map maps2 = (Map)JSON.parse(ITPK.itpk("观音灵签"));StringBuffer sb2 = new StringBuffer();sb2.append("您抽取的是第"+maps2.get("number2")+"签\n");sb2.append("签位:"+maps2.get("haohua")+"\n");sb2.append("签语:"+maps2.get("qianyu")+"\n");sb2.append("诗意:"+maps2.get("shiyi")+"\n");sb2.append("解签:"+maps2.get("jieqian"));text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, sb2.toString());break;case "月老灵签":Map maps3 = (Map)JSON.parse(ITPK.itpk("月老灵签"));StringBuffer sb3 = new StringBuffer();sb3.append("您抽取的是第"+maps3.get("number2")+"签\n");sb3.append("签位:"+maps3.get("haohua")+"\n");sb3.append("签语:"+maps3.get("shiyi")+"\n");sb3.append("解签:"+maps3.get("jieqian"));text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, sb3.toString());break;case "财神爷灵签":Map maps4 = (Map)JSON.parse(ITPK.itpk("财神爷灵签"));StringBuffer sb4 = new StringBuffer();sb4.append("您抽取的是第"+maps4.get("number2")+"签\n");sb4.append("签语:"+maps4.get("qianyu")+"\n");sb4.append("注释:"+maps4.get("zhushi")+"\n");sb4.append("解签:"+maps4.get("jieqian")+"\n");sb4.append("解说:"+maps4.get("jieshuo")+"\n");sb4.append("婚姻:"+maps4.get("hunyin")+"\n");sb4.append("事业:"+maps4.get("shiye")+"\n");sb4.append("求财:"+maps4.get("qiucai"));text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, sb4.toString());break;case "指令":text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, MessageUtil.mainMenu());break;default:text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, ITPK.itpk(content));break;}}else if (MessageUtil.Message_Event.equals(msgType)) {if ("subscribe".equals(map.get("Event"))) {text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, MessageUtil.mainMenu());}}System.out.println(text);writer.print(text);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {writer.close();}
}

茉莉机器人url组装类:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;public class ITPK {public static String api_key = "api_key";public static String api_secret = "api_secret";public static String itpk(String path){try {path = URLEncoder.encode(path, "utf-8");} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String url = "http://i.itpk.cn/api.php?question="+path+"&api_key="+api_key+"&api_secret="+api_secret;return LordJson.loadJSON(url);}
}

json处理类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class LordJson {public static String loadJSON(String url) {System.out.println(url);StringBuilder json = new StringBuilder();try {URL oracle = new URL(url);URLConnection yc = oracle.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(),"utf-8"));//防止乱码String inputLine = null;while ((inputLine = in.readLine()) != null) {json.append(inputLine);}in.close();} catch (MalformedURLException e) {} catch (IOException e) {}return json.toString();}
}

MessageUtil类:

public class MessageUtil {public static String Message_Text = "text";public static String Message_News = "news";public static String Message_Image = "image";public static String Message_Voice = "voice";public static String Message_Video = "video";public static String Message_ShortVideo = "shortvideo";public static String Message_Location = "location";public static String Message_Link = "link";public static String Message_Event= "event";public static String Message_Event_Sub= "subscribe";/*** xml转map集合* @param request* @return* @throws IOException* @throws DocumentException*/public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{Map<String, String> map = new HashMap<String,String>();SAXReader reader = new SAXReader();InputStream is = request.getInputStream();Document document = reader.read(is);Element root = document.getRootElement();List<Element> list = root.elements();for (Element e:list) {map.put(e.getName(), e.getText());}is.close();return map;}/*** 将文本消息转换成xml* @param textMessage* @return*/public static String textMessageToXml(TextMessage textMessage){XStream xStream = new XStream();xStream.alias("xml", textMessage.getClass());return xStream.toXML(textMessage);}/*** 将图片信息转换成xml* @param imageMessage* @return*/public static String imageMessageToXml(ImageMessage imageMessage){XStream xStream = new XStream();xStream.alias("xml", imageMessage.getClass());return xStream.toXML(imageMessage);}/***将图文消息转换成xml * @param newsMessage* @return*/public static String newsMessageToXml(NewsMessage newsMessage){XStream xStream = new XStream();xStream.alias("xml", newsMessage.getClass());xStream.alias("item", new News().getClass());return xStream.toXML(newsMessage);}public static String repluByImage(String toUserName,String fromUserName,String msgType,String mediaId){ImageMessage imageMessage = new ImageMessage();imageMessage.setToUserName(fromUserName);imageMessage.setFromUserName(toUserName);imageMessage.setCreateTime(new Date().getTime());Image image = new Image();image.setMediaId(mediaId);imageMessage.setImage(image);return MessageUtil.imageMessageToXml(imageMessage);}/*** 文本回复* @param toUserName* @param fromUserName* @param msgType* @param content* @return*/public static String replyByKeyWord(String toUserName,String fromUserName,String msgType,String content){TextMessage message = new TextMessage();message.setFromUserName(toUserName);message.setToUserName(fromUserName);message.setMsgType(msgType);message.setCreateTime(new Date().getTime());message.setContent(content);return MessageUtil.textMessageToXml(message);}public static String mainMenu(){StringBuffer sb = new StringBuffer();sb.append("指令:\n");sb.append("地区天气 \n");sb.append("天气\n");sb.append("@tq您的ip地址\n");sb.append("@ip您的ip地址\n");sb.append("ip\n");sb.append("@qq要查询的QQ号码\n");sb.append("@lol英雄联盟大区--角色名称\n");sb.append("@sfz身份证号码\n");sb.append("@sjh手机号码\n");sb.append("@cy四字成语\n");sb.append("笑话\n");sb.append("观音灵签\n");sb.append("月老灵签\n");sb.append("财神爷灵签");return sb.toString();}
}

还有两个实体类:

/*** 信息基础类* @author Administrator**/
public class BaseMessage {private String ToUserName;private String FromUserName;private long CreateTime;private String MsgType;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}
}
/*** 文本信息类* @author Administrator**/
public class TextMessage extends BaseMessage{private String Content;private long MsgId;public String getContent() {return Content;}public void setContent(String content) {Content = content;}public long getMsgId() {return MsgId;}public void setMsgId(long msgId) {MsgId = msgId;}
}

其中json传唤成map需要一个jar包,下载地址:
http://download.csdn.net/detail/zxxz5201314/9926317

java微信自动回复机器人开发(java微信开发学习笔记3)相关推荐

  1. python 微信自动回复机器人_python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)...

    前言首先你的微信号能够登录网页版微信,才能打造你的专属个人微信号机器人,点击跳转网页版微信登录页面 类似的文章网上也都有,其实我也是受到别的文章的一些启发,因为不是每个人都想实现同样的功能的,直接套用 ...

  2. 微信自动回复机器人使用手册

    微信也能自动回复啦?没错,微信自动回复机器人正式上线了!今天勤劳的小编就整理了一份微信自动回复机器人的使用手册,希望对小伙伴们有所帮助. 工具 米云微信自动回复机器人 下载/安装 登录www.miyu ...

  3. Python开发:微信自动回复机器人是怎么做的 ?

    简单粗暴,分享一种有趣的玩法---微信自动回复机器人. 程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器人小笼包跟自己微信好友聊天的截图. 二.程序介绍 欢迎加入pyt ...

  4. python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)

    python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python实现微信自动回复机器人+查看别 ...

  5. python 贴吧自动回复机-Python实现微信自动回复机器人详细教程

    首先,我们需要安装并配置好Python环境,并安装requests和itchat包,我用的是Windows7环境! https://www.python.org/ python官网 下载 然后直接打开 ...

  6. python 贴吧自动回复机-python_库学习_02_微信自动回复机器人

    一.python发展的趋势日益庞大,微信也有对应的库itchat.这次的实例做做成可在任意电脑运行的微信自动回复机器人exe.文件. 二.完成这个小应用我们需要装一些库,, itchat:这个东东不出 ...

  7. Java开发面试高频考点学习笔记(每日更新)

    Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6. ...

  8. 如何用 30 行代码实现微信自动回复机器人?

    作者 | Ahab 责编 | 胡巍巍 写在前面 很多朋友对itchat非常感兴趣,近日又学到了itchat另一种有趣的玩法--微信自动回复机器人. 程序很简单仅仅三十行代码左右,实现了机器人自动与你的 ...

  9. python发音机器人_微信自动回复机器人(PHP与python)

    微信自动回复机器人很受欢迎,可以通过简单的代码编写就可以省去大部分的人工回复时间.接下来贤集网小编要与大家分享的的是微信机器人自动回复消息如何通过PHP与python语言实现. 用python实现微信 ...

最新文章

  1. 【原创】CGAL中,2D Arrangements学习笔记
  2. 使用WebEx录制视频并转换为MP4
  3. apache+tomcat​现在我们实现session共享
  4. 计算机知识必备,小结||计算机基础知识点十(必备)
  5. 一体化系统中心服务器,数据中心一体化:监测与控制
  6. lambda 高并发_玩Java 8 – Lambda和并发
  7. datastage配置oracle,IBM Datastage8.5配置问题
  8. java 查询后 jsonobject key 排序_商品品牌业务之后台Java代码的编写
  9. 《Go 语言程序设计》读书笔记 (五) 协程与通道
  10. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO
  11. SUSE Labs Con 2018有感
  12. php 模拟登陆(不带验证码)采集数据
  13. java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)
  14. noi 1.5第38题 计算多项式的导数
  15. 09款苹果笔记本图片_苹果2009-2012款Macbook Pro 13寸笔记本更换硬盘教程
  16. ttl转rs232发送十六进制_电脑USB转TTL串口RS232串口模块
  17. sizeof和strlen使用详解
  18. js 数字转为罗马数字(互转换),I 、II 、 III 、IV、V
  19. Spring Boot 学习笔记 8 : Elasticsearch
  20. Win10 1709 无法访问局域网共享问题及解决

热门文章

  1. 时空召唤今天服务器维护吗,时空召唤2.3日凌晨5点周更新维护公告[多图]
  2. 小米游戏鼠标Lite RGB 评测
  3. 很容易就放弃的摄影学习
  4. Shader-马赛克
  5. ajax提交form表单后台@RequestBody接收json字符串
  6. 上传视频时自动完成截取缩略图(一)
  7. Latex 在字母上方的特殊符号的打印
  8. 25TML5期末大作业:影视网站设计——电影请以你的名字呼唤我(4页) 大学生简单个人静态HTML网页设计作品 DIY布局个人介绍网页模板代码 DY学生个人网站制作成品下载
  9. 公众号怎么引流推广?一文讲透个人公众号运营玩法
  10. 中荣股份深交所上市破发:公司市值47亿 家族色彩浓厚