java微信自动回复机器人开发(java微信开发学习笔记3)
来源:互联网 发布:房卡游戏源码 编辑:程序博客网 时间:2024/06/05 15:41
微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的api进行回复即可。我使用的茉莉机器人,官网地址如下:
http://www.itpk.cn/
茉莉机器人的api:http://www.itpk.cn/robot.php
接口比较简单,看看就会,我直接上源代码
下面代码同样基于之前的微博,需要的可以去看一下:
http://blog.csdn.net/zxxz5201314/article/details/76917107
首先对用户发送的文本进行处理,特殊字段分别处理,同样Post请求:
@SuppressWarnings("rawtypes")@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub req.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 block e.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 block e1.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
阅读全文
0 0
- java微信自动回复机器人开发(java微信开发学习笔记3)
- Java微信开发-自动回复-
- java 微信自动回复功能开发
- java微信接收并回复文本信息(java微信开发学习笔记2)
- 微信公众号后台java开发实现自动回复机器人
- 微信公众号后台java开发实现自动回复机器人
- java微信开发-消息接收和自动回复
- java 微信自动回复功能开发(续)
- 微信公众号开发--关注后自动回复(Java记录篇)
- 微信开发-消息模板回复(java)
- 微信开发之关注自动回复
- nodejs微信开发--自动回复 wechat
- 微信消息自动回复开发
- 微信开发之自动回复
- 微信公众号开发自动回复
- Python实现微信自动回复机器人
- python实现微信机器人自动回复
- python之微信自动回复机器人
- js对数组排序
- 树结构练习——排序二叉树的中序遍历
- 2017/8/4 第十二天
- 欢迎使用Markdown编辑器写博客
- hdu6073二分图完美匹配之权值之积再求和
- java微信自动回复机器人开发(java微信开发学习笔记3)
- 字节流与字符流的区别&&用字节流好还是用字符流好?
- Windows 10 家庭中文版升级到专业版
- MySQL 获得当前日期时间 函数
- AndroidPdf框架一览(一)
- 简单创建Activiti工作流demo
- Java 处理浮点数出现的各种问题的解决办法
- mac 下,tmux进入后默认为zsh的方法
- C#与C++进程间管道通信