精华内容
下载资源
问答
  • 主要为大家详细介绍了java实现自动回复聊天机器人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 此项目是模仿微信自动回复机器人实现的简单小demo,供学习使用,谢谢
  • qq自动回复机器人qq自动回复机器人是一款非常好用的qq聊天智能回复软件。qq自动回复机器人可以在win7、win8等操作系统下完美运行,能使用各种不同类型语句进行聊天,是客户人员日常工作好帮手。qq自动回复机器人功能...

    qq自动回复机器人

    qq自动回复机器人是一款非常好用的qq聊天智能回复软件。qq自动回复机器人可以在win7、win8等操作系统下完美运行,能使用各种不同类型语句进行聊天,是客户人员日常工作好帮手。

    qq自动回复机器人功能介绍:

    一:动态循环发送方式:

    1:如果使用OICQ聊天,请选择QQ模式;如果在聊天室或QQ二人世界聊天请选择聊天室模式.

    2:点击发送按钮后用鼠标点击一下QQ或聊天室发言框即可循环发送语句.

    3:为了避免在切换窗口时造成发送混乱,建议选择锁定窗口发送(将鼠标在聊天窗口点击一下,然后按下ctrl+F8即可获得窗口标题).

    4:可以根据情况选择发送速度,还可以在功能设置中自定义发送时间间隔.

    二:静态单句发送方式:

    1:打开所选的QQ聊天窗口,双击列表框中的语句,即可自动发送语句到所选的各类QQ聊天窗口和QQ聊天室.

    2:为了使聊天更富情趣,可任意选择数十种句尾表情.

    三:自动回复功能

    1:填入要自动回复的好友或其他人的QQ号码(最多可填三个);选择单句回复或循环回复,点击启动按钮启动自动回复功能;

    2:在QQ系统参数设置中选择自动弹出窗口.

    3:如果没有在系统参数设置中选择自动弹出窗口.当发来消息时,点击闪动的头像亦可自动发送.

    4:每当有对应的QQ号码发来的消息时,便可自动选择聊天语句发送.

    展开全文
  • 微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的api进行回复即可。我使用的茉莉机器人,官网地址如下: http://www.itpk.cn/ 茉莉机器人的api:http://www.itpk.cn/robot.php 接口...

    微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的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 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

    展开全文
  • 微信公众号后台java开发实现自动回复机器人 1.注册微信公众号。(简单) 2.注册图灵机器人。(自己百度) 1)注册后可以拿到key (注意 api接入里的钥匙不要打开,否则要加解密,麻烦) 3.配置微信...

    微信公众号后台java开发实现自动回复机器人


    1.注册微信公众号。(简单)

    2.注册图灵机器人。(自己百度)

    1)注册后可以拿到key  (注意  api接入里的钥匙不要打开,否则要加解密,麻烦)

    3.配置微信公众号服务器验证。

    1)在开发的基本配置下,填写控制器servlet访问的路径。

    2)token随意写,不过要和后台一致

    3)选择明文

    4)随机选个字符串

    然后点击提交(这里微信会发送请求和你写的验证看是否匹配,具体看微信公众号平台开发文档)  ?其实这里不用操作什么,他发送的匹配直接返回验证就过了,但是不是很安全。


    4.接着是解析微信发送过来的xml格式,把他弄成map集合  

    5.解析得到内容 发送httpGet请求 丢过去给图灵机器人接口,返回回复内容

    6.将东西封装成xml返回回去

    然后OK




    涉及的包 一个都不能少(当初就是少了commons-logging)



    代码如下:

    1. package com.lin.po;  
    2.   
    3. /* 
    4.  * 文本消息 
    5. <xml> 
    6.  <ToUserName><![CDATA[toUser]]></ToUserName> 
    7.  <FromUserName><![CDATA[fromUser]]></FromUserName> 
    8.  <CreateTime>1348831860</CreateTime> 
    9.  <MsgType><![CDATA[text]]></MsgType> 
    10.  <Content><![CDATA[this is a test]]></Content> 
    11.  <MsgId>1234567890123456</MsgId> 
    12.  </xml> 
    13.  *  
    14.  */  
    15. /** 
    16.  *       参数             描述 
    17.  *  ToUserName      开发者微信号 
    18.  *  FromUserName    发送方帐号(一个OpenID) 
    19.  *  CreateTime      消息创建时间 (整型) 
    20.  *  MsgType         text 
    21.  *  Content         文本消息内容 
    22.  *  MsgId           消息id,64位整型 
    23.  * @author linxinda 
    24.  * 
    25.  */  
    26. public class TextMessage {  
    27.    private String ToUserName;  
    28.    private String FromUserName;  
    29.    private long CreateTime;  
    30.    private String MsgType;  
    31.    private String Content;  
    32.    private String MsgId;  
    33. public String getToUserName() {  
    34.     return ToUserName;  
    35. }  
    36. public void setToUserName(String toUserName) {  
    37.     ToUserName = toUserName;  
    38. }  
    39. public String getFromUserName() {  
    40.     return FromUserName;  
    41. }  
    42. public void setFromUserName(String fromUserName) {  
    43.     FromUserName = fromUserName;  
    44. }  
    45. public long getCreateTime() {  
    46.     return CreateTime;  
    47. }  
    48. public void setCreateTime(long createTime) {  
    49.     CreateTime = createTime;  
    50. }  
    51. public String getMsgType() {  
    52.     return MsgType;  
    53. }  
    54. public void setMsgType(String msgType) {  
    55.     MsgType = msgType;  
    56. }  
    57. public String getContent() {  
    58.     return Content;  
    59. }  
    60. public void setContent(String content) {  
    61.     Content = content;  
    62. }  
    63. public String getMsgId() {  
    64.     return MsgId;  
    65. }  
    66. public void setMsgId(String msgId) {  
    67.     MsgId = msgId;  
    68. }  
    69.      
    70.      
    71. }  


    1. package com.lin.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5. import java.util.Date;  
    6. import java.util.HashMap;  
    7. import java.util.Map;  
    8.   
    9. import javax.servlet.ServletException;  
    10. import javax.servlet.http.HttpServlet;  
    11. import javax.servlet.http.HttpServletRequest;  
    12. import javax.servlet.http.HttpServletResponse;  
    13.   
    14. import com.lin.po.TextMessage;  
    15. import com.lin.util.MessageUtil;  
    16. import com.lin.util.TulingApiUtil;  
    17. import com.lin.util.WeChatConnectValidateUtil;  
    18.   
    19. public class WeChatServlet extends HttpServlet {  
    20.   
    21.       
    22.     public void doPost(HttpServletRequest req, HttpServletResponse resp)  
    23.             throws ServletException, IOException {  
    24.         req.setCharacterEncoding("UTF-8");  
    25.         resp.setCharacterEncoding("UTF-8");  
    26.         PrintWriter out =resp.getWriter();  
    27.           try {  
    28.             Map<String, String> map=MessageUtil.xmlToMap(req);  
    29.             String toUserName=map.get("ToUserName");  
    30.             String fromUserName=map.get("FromUserName");  
    31.             String msgType=map.get("MsgType");  
    32.             String content=map.get("Content");  
    33.                   
    34.             String message=null;          
    35.             if("text".equals(msgType)){  
    36.             //  System.out.println("text.equals(msgType)");  
    37.                 TextMessage text =new TextMessage();  
    38.                 text.setFromUserName(toUserName);  
    39.                 text.setToUserName(fromUserName);  
    40.                 text.setMsgType("text");  
    41.                   
    42.                   
    43.                 //这里填写回复内容  
    44.                 text.setContent(TulingApiUtil.getTulingResult(content));  
    45.                   
    46.                   
    47.                 text.setCreateTime(new Date().getTime());  
    48.                 message=MessageUtil.textMessageToXml(text);  
    49.             }  
    50.         //  System.out.println(message);  
    51.             out.print(message);  
    52.         } catch (Exception e) {  
    53.             //System.out.println("doPost->try..catch");  
    54.             e.printStackTrace();  
    55.         }finally{  
    56.             out.close();  
    57.         }  
    58.     }  
    59.   
    60.       
    61.     /* 
    62.      * Get方法是微信接入请求验证时用的 其他都是post请求 
    63.      * 参数               描述 
    64.     signature   微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 
    65.     timestamp       时间戳 
    66.     nonce           随机数 
    67.     echostr         随机字符串 
    68.      */  
    69.      //其实这里不用搞加密,直接返回echostr也行  只是不太安全  
    70.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
    71.             throws ServletException, IOException {  
    72.             String signature=req.getParameter("signature");  
    73.             String timestamp=req.getParameter("timestamp");  
    74.             String nonce=req.getParameter("nonce");  
    75.             String echostr=req.getParameter("echostr");  
    76.               
    77.             PrintWriter out =resp.getWriter();  
    78.             if(WeChatConnectValidateUtil.checkSignature(signature,timestamp,nonce)){  
    79.                 out.print(echostr);  
    80.             }  
    81.     }  
    82. }  


    1. package com.lin.util;  
    2. import java.io.UnsupportedEncodingException;  
    3. import java.security.MessageDigest;  
    4. import java.security.NoSuchAlgorithmException;  
    5.   
    6. /** 
    7.  * 使用Java自带的MessageDigest类 
    8.  * @author linxinda 
    9.  */  
    10. public class EncryptionUtil {  
    11.       
    12.   public static String getSha1(String source){  
    13.     // 用来将字节转换成 16 进制表示的字符  
    14.      // System.out.println("进getSha1");  
    15.         
    16.     char hexDigits[] = {'0''1''2''3''4''5''6''7''8''9''a''b''c''d''e''f'};  
    17.   
    18.     try {  
    19.       MessageDigest mdTemp = MessageDigest.getInstance("SHA1");  
    20.       mdTemp.update(source.getBytes("UTF-8")); // 通过使用 update 方法处理数据,使指定的 byte数组更新摘要  
    21.        
    22.       byte[] encryptStr = mdTemp.digest(); // 获得密文完成哈希计算,产生128 位的长整数  
    23.         
    24.       int j=encryptStr.length;  
    25.       char buf[] = new char[j * 2];   
    26.         
    27.       int k = 0// 表示转换结果中对应的字符位置  
    28.         
    29.       for (int i = 0; i < j; i++) { // 从第一个字节开始,对每一个字节,转换成 j 进制字符的转换  
    30.         byte byte0 = encryptStr[i]; // 取第 i 个字节  
    31.         buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移  
    32.         buf[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换  
    33.       }  
    34.      // System.out.println(buf.toString());  
    35.       return new String(buf); // 换后的结果转换为字符串  
    36.     } catch (Exception e) {  
    37.         //System.out.println("getSha1->try...catch");  
    38.       e.printStackTrace();  
    39.     }  
    40.     return null;  
    41.   }  
    42. }  

    1. package com.lin.util;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.InputStream;  
    5. import java.util.HashMap;  
    6. import java.util.List;  
    7. import java.util.Map;  
    8.   
    9. import javax.servlet.http.HttpServletRequest;  
    10.   
    11. import org.dom4j.Document;  
    12. import org.dom4j.DocumentException;  
    13. import org.dom4j.Element;  
    14. import org.dom4j.io.SAXReader;  
    15.   
    16. import com.lin.po.TextMessage;  
    17. import com.thoughtworks.xstream.XStream;  
    18. import com.thoughtworks.xstream.io.xml.StaxDriver;  
    19.   
    20. public class MessageUtil {  
    21.     /** 
    22.      * xml转为map集合 
    23.      * @param request 
    24.      * @return 
    25.      * @throws IOException 
    26.      * @throws DocumentException 
    27.      */  
    28.       public static Map<String,String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{  
    29.           
    30.           //System.out.println("进xmlToMap");  
    31.             
    32.           Map<String,String> map=new HashMap<String, String>();  
    33.             
    34.           //dom4j saxReader解析xml  
    35.           SAXReader reader=new SAXReader();  
    36.             
    37.           //从request中获取输入流  
    38.           InputStream ins = request.getInputStream();  
    39.             
    40.           //解析xml文档  
    41.           Document doc =reader.read(ins);  
    42.             
    43.           //获得根节点  
    44.           Element root = doc.getRootElement();  
    45.             
    46.           //List存储  遍历  
    47.           List<Element> list=  root.elements();  
    48.             
    49.           for (Element e : list) {  
    50.               map.put(e.getName(), e.getText());  
    51.         }  
    52.           ins.close();  
    53.         //  System.out.println(map.toString());  
    54.         return map;    
    55.       }  
    56.         
    57.       /** 
    58.        * 将文本消息对象转换为xml 
    59.        * @param textMessage 
    60.        * @return 
    61.        */  
    62.         
    63.        //xtream jar包 ->  XStrem类提供对象转xml  
    64.       public static String textMessageToXml(TextMessage textMessage){  
    65.          // System.out.println("进textMessageToXml");  
    66.           /** 
    67.            * new StaxDriver()这个很重要 没有这个就错了 
    68.            * XStream xstream=new XStream(new StaxDriver()); 
    69.            */  
    70.         XStream xstream=new XStream(new StaxDriver());    
    71.         xstream.alias("xml", textMessage.getClass());  
    72.         // System.out.println("textMessage");  
    73.        return xstream.toXML(textMessage);       
    74.       }  
    75. }  


    1. package com.lin.util;  
    2.   
    3. import java.util.Arrays;  
    4.   
    5. public class WeChatConnectValidateUtil {  
    6.     //Token 和微信后台接入接口的token一致  
    7.     private final static String TOKEN="linxinda";    
    8.       
    9.    public static boolean checkSignature(String signature,String timestamp,String nonce){  
    10.        //System.out.println("进checkSignature");  
    11.        String arr[]=new String[]{TOKEN,timestamp,nonce};  
    12.          
    13.        //排序  
    14.        Arrays.sort(arr);  
    15.          
    16.        //生成字符串  
    17.        StringBuffer content=new StringBuffer();  
    18.        for(int i=0;i<arr.length;i++){  
    19.            content.append(arr[i]);     
    20.        }  
    21.          
    22.        //sha1加密  
    23.        String temp=EncryptionUtil.getSha1(content.toString());  
    24.          
    25.       // System.out.println(temp+" "+signature.equals(temp));  
    26.        return signature.equals(temp);  
    27. }  
    28. }  

    1. // 调用图灵机器人api接口,获取智能回复内容:  
    2. package com.lin.util;  
    3.   
    4. import java.io.IOException;  
    5. import java.io.UnsupportedEncodingException;  
    6. import java.net.URLEncoder;  
    7.   
    8. import org.apache.http.HttpResponse;  
    9. import org.apache.http.client.ClientProtocolException;  
    10. import org.apache.http.client.methods.HttpGet;  
    11. import org.apache.http.impl.client.HttpClients;  
    12. import org.apache.http.util.EntityUtils;  
    13. import org.json.JSONException;  
    14. import org.json.JSONObject;  
    15.   
    16.   
    17. /** 
    18.  * 调用图灵机器人api接口,获取智能回复内容 
    19.  * @author pamchen-1 
    20.  * 
    21.  */  
    22. public class TulingApiUtil {  
    23.     /** 
    24.      * 调用图灵机器人api接口,获取智能回复内容,解析获取自己所需结果 
    25.      * @param content 
    26.      * @return 
    27.      */  
    28.       
    29.     private static final String KEY="这里填自己的key";  
    30.       
    31.     public static String getTulingResult(String content){  
    32.         //System.out.println("传入的内容->"+content);  
    33.           
    34.           
    35.         /** 此处为图灵api接口,参数key需要自己去注册申请,先以11111111代替 */  
    36.          String apiUrl = "http://www.tuling123.com/openapi/api?key="+KEY+"&info=";  
    37.         String param = "";  
    38.           
    39.         //System.out.println("!!!!!!!");  
    40.           
    41.         try {  
    42.             param = apiUrl+URLEncoder.encode(content,"utf-8");  
    43.         } catch (UnsupportedEncodingException e1) {  
    44.             System.out.println("UnsupportedEncodingException");  
    45.             e1.printStackTrace();  
    46.         } //将参数转为url编码  
    47.           
    48.           
    49.         //System.out.println("?????????");  
    50.           
    51.         /** 发送httpget请求 */  
    52.         HttpGet request = new HttpGet(param);  
    53.         String result = "";  
    54.         try {  
    55.                
    56.             HttpResponse response = HttpClients.createDefault().execute(request);  
    57.         /** 
    58.          * 特别注意  这一步一定要加commons-logging 这个jar包  否则会没反应,调试了好久!! 
    59.          * 似乎这个jar包是打印信息的     
    60.          */  
    61.             int code =response.getStatusLine().getStatusCode();  
    62.             if(code==200){  
    63.                 result = EntityUtils.toString(response.getEntity());  
    64.             }  
    65.             else {  
    66.             //  System.out.println("code="+code);  
    67.             }  
    68.         } catch (ClientProtocolException e) {  
    69.             System.out.println("ClientProtocolException");  
    70.             e.printStackTrace();  
    71.         } catch (IOException e) {  
    72.             System.out.println("IOException");  
    73.             e.printStackTrace();  
    74.         }  
    75.           
    76.           
    77.         /** 请求失败处理 */  
    78.         if(null==result){  
    79.         //  System.out.println("null==result");  
    80.             return "对不起,你说的话真是太高深了……";  
    81.         }  
    82.           
    83.         //  
    84.           
    85.         //System.out.println("...........");  
    86.         try {  
    87.             StringBuffer bf=new StringBuffer();  
    88.             String s="";  
    89.             JSONObject json = new JSONObject(result);  
    90.             //以code=100000为例,参考图灵机器人api文档  
    91.             /** 
    92.              *   code   说明 
    93.                 100000  文本类 
    94.                 200000  链接类 
    95.                 302000  新闻类 
    96.                 308000  菜谱类 
    97.              */  
    98.             if(100000==json.getInt("code")){  
    99.                 s = json.getString("text");  
    100.                 bf.append(s);  
    101.             }  
    102.             else if(200000==json.getInt("code")){  
    103.                 s = json.getString("text");  
    104.                 bf.append(s);  
    105.                 bf.append("\n");  
    106.                 s = json.getString("url");  
    107.                 bf.append(s);  
    108.             }  
    109.             else if(302000==json.getInt("code")){  
    110.                 //s = json.getString("text");  
    111.                 s="待开发有点麻烦!\n";  
    112.                 bf.append(s);  
    113.             }  
    114.             else if(308000==json.getInt("code")){  
    115.                 //s = json.getString("text");  
    116.                 s="待开发有点麻烦!\n";  
    117.                 bf.append(s);  
    118.             }  
    119.             result=bf.toString();  
    120.         } catch (JSONException e) {   
    121.             System.out.println("JSONException");  
    122.             e.printStackTrace();  
    123.         }  
    124.         //System.out.println("机器人回复->"+result);  
    125.         return result;  
    126.     }  
    127. }  


    1. package com.lin.test;  
    2.   
    3. import java.io.BufferedInputStream;  
    4. import java.util.Scanner;  
    5.   
    6. import com.lin.util.TulingApiUtil;  
    7.   
    8. public class Test {  
    9.   
    10.     public static void main(String[] args) {  
    11.         Scanner scanner=new Scanner(new BufferedInputStream(System.in));  
    12.             while(scanner.hasNext()){  
    13.                 String content=scanner.next();  
    14.                  System.out.println(TulingApiUtil.getTulingResult(content));  
    15.             }  
    16.             scanner.close();  
    17.     }  
    18.   
    19. }  




    最后总结自己遇到的问题,便于日后查看:

    1. 图灵机器人的加密钥匙要关闭,否则就得进行加解密操作,他的api里有详细说明。

    2.可以多写些测试类方便调试,不要每次都传到服务器上调试,好麻烦。


    最后记下自己服务器的一些信息

    service tomcat6/httpd/iptable restart

    微信要80端口,一些忘记的命令见阿里云配置


     
     
    展开全文
  • 模拟微信自动回复机器人 实现根据设置的指令,让机器人自动回复内容 后台使用基于配置文件的mybatis框架 本项目主要用于熟悉mybatis框架的内容,谢谢!!
  • 自动回复机器人apiRobot Framework is language-agnostic open-source test automation framework for test automation and robotic process automation (RPA).It is operating system and application independent....

    自动回复机器人api

    Robot Framework is language-agnostic open-source test automation framework for test automation and robotic process automation (RPA).It is operating system and application independent. Several standard libraries are bundled with the framework, and there are separately developed external libraries galore that can be installed based on your needs. Libraries provide the actual automation and testing capabilities to framework by providing keywords. Test cases are written using a keyword-testing methodology written in a tabular format. You get more information about it here

    Robot Framework是与语言无关的开源测试自动化框架,用于测试自动化和机器人过程自动化(RPA),它独立于操作系统和应用程序。 框架捆绑了几个标准库,并且可以根据您的需要安装单独开发的外部库galore。 库通过提供关键字来为框架提供实际的自动化和测试功能。 测试用例使用以表格形式编写的关键字测试方法编写。 您可以在此处获得有关它的更多信息

    为什么选择ROBOT框架? (Why ROBOT Framework ?)

    Might be thinking there are already quite a number of Rest API testing frameworks like Postman, SoapUI, JMeter, Rest-Assured and several others.How is wrting test cases using Robot Framework different from others. Robot framework is language-agnostic, you need not learn any language or scripting for write test cases. ROBOT framework is not only for REST APIs testing, it can be used for testing GUI (using selenium library ), verify database (using database library) and there are many more libraries which can be leveraged.

    可能会认为已经有很多Rest API测试框架,例如Postman,SoapUI,JMeter,Rest-Assured等。使用Robot Framework编写测试用例与其他有何不同? 机器人框架与语言无关,您无需学习任何语言或脚本即可编写测试用例。 ROBOT框架不仅用于REST API测试,还可以用于测试GUI(使用selenium库),验证数据库(使用数据库库),并且还有许多可以利用的库。

    For example if you have test case with steps, perform REST API POST operation, check in DB to see object is created and fianlly verify POST response is valid. All the above steps can be verified in one test case written with ROBOT framework

    例如,如果您有带有步骤的测试用例,请执行REST API POST操作,签入数据库以查看是否创建了对象,并最终验证POST响应是否有效。 以上所有步骤都可以在用ROBOT框架编写的一个测试用例中进行验证

    使用RestInstance库 (Using RestInstance Library)

    Here we will see how to use RESTinstace library that is part of the Robot framework to test RESTful APIs. The Keywords provided in the library are simple to use, supports all the methods (GET, PUT, POST, PATCH, DELETE) , supports sending custom the headers, keywords for validating the reasponse header and also validates JSON using JSON Schema.

    在这里,我们将看到如何使用RESTinstace库(它是Robot框架的一部分)来测试RESTful API。 库中提供的关键字易于使用,支持所有方法(GET,PUT,POST,PATCH,DELETE),支持发送自定义标头,用于验证重新组合标头的关键字,还使用JSON Schema验证JSON。

    Here is the sample test case

    这是示例测试用例

    *** Settings ***
    Library String
    Library REST http://echo.jsontest.com ssl_verify=falseSet expectations
    Expect response { "status": { "enum": [200, 201, 204, 400] } }
    Expect response { "seconds": { "maximum": 2} }*** Test Cases ***Get Employee
    GET employee/1001
    Output response body
    String response body employee 1001

    Above test case sends GET request to <url>/employee/1001 , and then verifies the following output API out in JSON format

    上面的测试用例将GET请求发送到<url> / employee / 1001,然后以JSON格式验证以下输出API

    {"employee": "1001"}

    You can get more sample test cases from author of this library from here

    您可以从此处从该库的作者那里获得更多示例测试用例。

    运行测试用例 (Running the Test cases)

    I have created Docker Image for Robot Framework and then installed RESTinstace library, so we can run tests isolated from the application. This kind of setup will be helpful for running smoke and regression tests after deploying the application and without distrubing the application. You can find scripts to build Docker image here.

    我已经为Robot Framework创建了Docker Image,然后安装了RESTinstace库,因此我们可以运行与应用程序隔离的测试。 这种设置将有助于在部署应用程序之后运行烟雾和回归测试,而不会破坏应用程序。 您可以在此处找到用于构建Docker映像的脚本。

    To build image run the script build_image.sh. Once the Docker image is create and available, you can use run_tests.sh to run test cases placed in tests folder

    要构建映像,请运行脚本build_image.sh。 创建Docker映像并可用后,您可以使用 run_tests.sh 运行放置在测试文件夹中的测试用例

    测试REST API的测试用例 (Test case to test REST API)

    In test case i am using http://echo.jsontest.com to test REST API . Run the test case placed in tests folder using run_tests.sh , it launches a docker, copies the test cases and executes them.

    在测试用例中,我使用http://echo.jsontest.com来测试REST API。 使用以下命令运行放置在tests文件夹中的测试用例 run_tests.sh 它启动 码头工人,复制测试用例并执行它们。

    The Robot Framework output files are put in the same directory under results/. In the console you can see it has created log.html (detailed report) and report.html (execution summary)

    Robot Framework输出文件放在results /下的同一目录中。 在控制台中,您可以看到它已经创建了log.html(详细报告)和report.html(执行摘要)

    测试执行结果 (Test Execution Results)

    Robot Framework genrates nice test report for all the test-case executed with detailed steps and execution status.

    Robot Framework会为执行的所有测试用例生成详细的测试报告,并提供详细的步骤和执行状态。

    Image for post

    结论 (Conclusion)

    Robot Framework can be used to write smoke and regression test cases and test the application in isolation and RestInstance is a powerful library in terms of JSON schema checking and validations. You can get more information about RESTInstance here

    Robot Framework可以用来编写冒烟和回归测试用例,并隔离测试应用程序,而RestInstance是一个强大的库,可以进行JSON模式检查和验证。 您可以在此处获取有关RESTInstance的更多信息。

    翻译自: https://medium.com/@ravthiru/automate-rest-api-testing-with-robot-framework-ad1959057517

    自动回复机器人api

    展开全文
  • 机器人:自动回复用户的问题. #在? #在 # Java好学吗? # Java好学 步骤分析: 1、用户从控制台输入内容 2、将用户输入的内容吗?去掉 3、输出内容
  • 自动回复机器人学习Mybatis

    千次阅读 2018-10-22 13:45:29
    自动回复机器人学习Mybatis 2-7代码重构 中文乱码问题 我们从request中取字符串,则设置request的字符集为utf-8 当然也可以写过滤器来实现.下面的代码是通过servlet自己写逻辑实现 //设置编码 request...
  • 30行代码实现微信自动回复机器人

    千次阅读 2019-01-29 08:37:55
    30行代码实现微信自动回复机器人 一、写在前面 今天下午又学到了itchat另一种有趣的玩法---微信自动回复机器人。 程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器人小笼包跟自己...
  • 哈哈哈哈哈图灵机器人开放API:http://www.tuling123.com/openapi/record.do?channel=338 由于官网上只有PHP和JAVA的接入演示。我就来发一发页面中的接入方法。简单易用无烦恼!!请求方式Api 地址:...
  • MyBatis 实战小项目 自动回复机器人

    千次阅读 2016-12-01 15:43:56
    这篇文章是    ...更新:增加了机器人自动回复功能 GitHub项目地址: https://github.com/DaleyChao/MicroMessage/tree/2619a12afa2bb6a493c9824398fad7707dc08f90 Zip包: ...
  • 自动回复聊天机器人

    2017-04-20 15:24:05
    能够根据用户发送的消息,自动回复
  • 今日推荐加小编微信(cxydev)备注:CSDN,加入免积分下载群备注:加群,你加入程序员吹水群机器人自动邀请的本文来源于Ahab杂货铺授权发布 ...
  • 使用ServerSocket实现自动回复机器人

    千次阅读 2017-02-15 14:23:31
    多线程实现多人访问自动回复机器人 怎么样才能让程序想微信啊淘宝客服一样同时允许多个客户端接入呢? 下面就要用到多线程了 改造一下代码,将Test1方法改造成如下代码 /** * 改造成多线程 * 接受...
  • 自动回复机器人案例分析基本功能:  接收发送指令;  根据指令自动回复对应的内容;  项目使用技术:  JSP+Servlet+JDBC  项目使用数据库中的数据表message    项目目录:    案例代码:  ...
  • 根据指令自动回复对应内容 模块划分 回复内容维护 对话功能 回复内容列表 回复内容删除 MyBatis的下载和核心架构的搭建  下载地址:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.2.8...
  • Socket编程的应用Socket介绍Server端和Client端发送信息(一发一收,交替实行)多线程实现即时聊天自动回复机器人(练习JDBC+Socket) Socket介绍 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个...
  • 选择自动回复-自动回复 →设置自动回复 (不要理会自动回复短语,这个功能太简陋了,可以以后到店小蜜里去弄更高级的) 这里有两个版本 一个是团队版本,一个是个人版本 个人版本可以客服独立设置 团队...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,210
精华内容 1,284
关键字:

java自动回复机器人

java 订阅