java微信自动回复机器人开发(java微信开发学习笔记3)「建议收藏」

java微信自动回复机器人开发(java微信开发学习笔记3)「建议收藏」微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的api进行回复即可。我使用的茉莉机器人,官网地址如下:http://www.itpk.cn/茉莉机器人的api:http://www.itpk.cn/robot.php接口比较简单,看看就会,我直接上源代码下面代码同样基于之前的微博,需要的可以去看一下:http://blog.csdn.net/zxxz520

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188721.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Unity Cutout材质 实现网格效果[通俗易懂]

    Unity Cutout材质 实现网格效果[通俗易懂]Cutout????效果????贴图准备????材质制作????效果????如图所示铁丝网不是模型只是一张128*128的贴图制作的材质,这样可以极大的降低模型面数制作也很速度!????贴图准备????ps中制作一张128*128尺寸带透明通道的图,如下所示:????材质制作????设置RenderingMode为Cutout模式,并且把贴图放到Albedo槽中????可以调节Tiling属性增加或减少网格密度…

    2022年9月23日
    5
  • 静态变量存储在那个区? – 转[通俗易懂]

    静态变量存储在那个区? – 转[通俗易懂]一时间忘咯然后就去转载..静态变量存储在__区A全局区B堆C栈D常量区参考答案:A知识点内存到底分几个区?1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由os回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域…

    2022年6月14日
    44
  • Hook(钩子技术)基本知识讲解,原理

    一、什么是HOOK(钩子)      对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。     钩子…

    2022年4月3日
    40
  • 用WijmoJS玩转您的Web应用 —— Ionic

    用WijmoJS玩转您的Web应用 —— Ionic

    2021年6月7日
    110
  • 网络协议、socket、webSocket

    网络协议、socket、webSocket一、网络协议网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。1、OSI七层协议OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,从上到下分别是7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层。下面的图表显示不同的协议在最初OSI模型中的位置:7应用层例如HTTP、SMTP…

    2022年5月2日
    41
  • 网络传真和传真服务器[通俗易懂]

    网络传真和传真服务器[通俗易懂]传真机自1906年在德国推出以来,到今天已走过一百多年的历史,传真的形式也从最早的机械传真、光电传真、数字传真发展到今天的电子传真、电脑传真、网络传真、无纸传真、传真系统、传真服务器、传真软件、传真卡等。   所谓电子传真机(包括各种类型的网络传真机、电脑传真机、数码传真机、无纸传真机、传真软件、传真系统、传真服务器等,下同),就是通过电脑收发传真。     在发送传真前,自动检

    2022年6月28日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号