zoukankan      html  css  js  c++  java
  • 只需两步,教你如何自动发送微信消息

    前段时间突然对微信里的一些消息感到厌烦,如果能有微软小冰这样的智能机器人帮我自动回复消息就好了。想到就开始动手。

    第一步:

    登录微信网页版,过程略。

    第二步:

    选择一个好友,按下F12,找到console控制台,输入如下代码。

    var appElement = document.querySelector('[ng-controller=chatSenderController]');
    var $scope = angular.element(appElement).scope();
    $scope.editAreaCtn = "想说的话";
    $scope.sendTextMessage();

    按下回车后效果

    image

    到此为止,两步已经结束。

    如果要定时,将$scope.sendTextMessage();改造,加上setTimeout即可。

    setTimeout(function(){
        $scope.sendTextMessage();
    },1000);

    重复发送同理,只是需要每次给输入框给值

    var appElement = document.querySelector('[ng-controller=chatSenderController]');
    var $scope = angular.element(appElement).scope();
    setInterval(function(){
        $scope.editAreaCtn = "想说的话";
        $scope.sendTextMessage();
    },1000);

    -------------------------------------------------------------分割线----------------------------------------------------------

    下面是高级攻略。我们要完成的是引入机器人自动回复,前面只是准备工作。机器人推荐图灵机器人http://www.tuling123.com/

    图灵机器人API:http://www.tuling123.com/openapi/api?key=******&info=你好

    其中key就是开发者key,注册账号可以免费获得。info为消息内容。

    在浏览器地址栏输入可以看到结果,为一个json串。

    image

    机器人准备好了,我们开始吧。

    第一步:获取对方发送的消息,可使用如下代码:

    function getChatInfo(){
        var info = '';
        var length = document.getElementsByClassName('left').length;
        if(length > 0){
            info = document.getElementsByClassName('left')[length-1].getElementsByTagName("pre")[0].innerText;
        }
        return info;
    }

    第二步:根据对方聊天内容,获取图灵机器人的返回值:

    主要依靠XMLHttpRequest对象。

    var appElement = document.querySelector('[ng-controller=chatSenderController]');
    var $scope = angular.element(appElement).scope(); 
    var xmlhttp = new XMLHttpRequest();
    function callback(){
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
            var responseText = xmlhttp.responseText;
            var str = eval("("+ responseText +")");
            $scope.editAreaCtn = str.text;
            $scope.sendTextMessage();
        }    
    }
    xmlhttp.onreadystatechange = callback;
    var oldInfo = '';
    function getChatInfo(){
        var info = '';
        var length = document.getElementsByClassName('left').length;
        if(length > 0){
            info = document.getElementsByClassName('left')[length-1].getElementsByTagName("pre")[0].innerText;
        }
        return info;
    }
    setInterval(function(){
        var info = getChatInfo();
        if(info != '' && info != oldInfo){
            xmlhttp.open("GET","http://www.tuling123.com/openapi/api?key=******&info=" + info, false);
            xmlhttp.send();
            oldInfo = info;
        }
    }, 1000);

    这时我们会遇到第一个挑战,跨域。如果是自己的服务器,自然好解决,设置下就OK。但是这是企鹅的,就不那么容易了。好在,发现了IE浏览器的一个特性,可以设置浏览器,允许跨域。放个链接好了http://jingyan.baidu.com/article/c33e3f48857933ea15cbb50a.html 

    跨域解决了,你以为好了吗,too young。 接下来遇到第二个挑战。https协议下不允许进行http请求。兵来将挡,水来土掩。自己搭建一个https 的WEB应用,然后重定向到http请求,自然就可以越过这个限制了。再放个链接:使用Java工具生成服务器证书和客户端端证书,安装并且设为信任。然后使用Tomcat搭建Web应用 http://jingyan.baidu.com/article/a948d6515d3e850a2dcd2ee6.html 当然别的Web应用也可以,抛砖引玉。搭建成功后再写个servlet。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            String info = request.getParameter("info");
            String url = "http://www.tuling123.com/openapi/api?key=******&info=" + info;
            response.sendRedirect(url);
        }

    xmlhttp.open()中的链接自然要改成这个:

    xmlhttp.open("GET","https://localhost:8443/directServer/servlet/DirectServlet?info=" + info, false);

    到这里也差不多要结束了,感谢看到这块的同学。当然最终的结果是,没成功。你们不要打我啊。虽然自己生成证书,但浏览器还是不信任,最终没能发出get请求。

  • 相关阅读:
    nginx缓存
    java 常用命令工具
    shell流程控制--循环语句
    Python 文档 涉及词汇
    python 学习网站
    python web入门程序
    编译安装 Python3.6.1
    正则表达式与grep
    编译安装 Nginx1.12.1
    查看进程号
  • 原文地址:https://www.cnblogs.com/nbspL/p/4970189.html
Copyright © 2011-2022 走看看