小贱鸡自动回复API已经不可以用了,现在改良接入图灵机器人API

360chrome浏览器团队翻译了部分谷歌插件开发文档

地址:http://open.chrome.360.cn/extension_dev/overview.html

具体封装插件的方法请参考开发文档。

具体代码如下:

background.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//在当前URL下运行 https://wx.qq.com/
var status = 0; //0停止 1运行
//消息传递监听 onRequest
chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {
    var text = request.text;
    var nick = request.nick;
    console.log(sender.tab ?
        "from a content script:" + sender.tab.url :
        "from the extension");
    console.log("收到消息:" + text);
    if (text != null && text.length > 0) {
        console.log("请求机器人获取回复");
        //请求机器人获取回复
        tulingQuery(nick,text, function (content,data) {
            sendResponse({
                dstContent : content, 
                reply : data
            });
        });
    else {
        sendResponse({
            reply : "未识别出留言内容"
        });
    }
 
});
 
chrome.browserAction.onClicked.addListener(function (tab) {
    if (tab.url.indexOf("wx.qq.com") >= 0) {
        //对 contentScript 发送消息
        if (status == 0)
            status = 1;
        else
            status = 0;
        console.log("send request");
        chrome.tabs.sendRequest(tab.id, {
            status : status
        }, function (response) {
            console.log(response);
        });
        //run();
    else {
        alert("这个只能在微信web运行!");
        console.log("只能在微信web运行");
    }
});
 
//图灵机器人回复
function tulingQuery(userid, txt, callback) {
    $.ajax({
        url : 'http://www.tuling123.com/openapi/api',
        type : 'get',
        data : {
            key : 'e64ad48100081ab77b668aa3105fe552',
            info : txt,
            userid : userid
        },
        success : function (data) {
            console.log(data);
            if (callback)
                callback(txt, data.text);
        },
        error : function () {}
    });
}
 
 
//  chrome.tabs.executeScript(null, {code: "console.log(666);"});

content_script.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
window.confirm = function () {}
var GSid, wx = new WX();
//消息传递监听 onRequest
chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {
    var status = request.status;
    console.log(sender.tab ?
        "from a content script:" + sender.tab.url :
        "from the extension");
    console.log("收到消息:" + status);
    if (status == 1) {
        //运行
        GSid = setInterval(function () {
                wx.reload();
                var item = wx.getReply();
                if (item.title == "红包家族") {
                    wx.openLatestRoom();
                    return;
                }
 
                if (!wx.isReplied(item) && item.text != "") {
                    console.log("判断是否回复过了");
                    console.log(item);
                    console.log("未回复过");
                    wx.replyComplete(item);
                    sendToExtension(item, function (content, reply) {
                        //提交回复
                        console.log("机器人回复:" + reply);
                        wx.putReply(item, reply + "[机器人测试回复]");
                    });
                else {
                    wx.replyComplete(item);
                    wx.openLatestRoom();
                }
 
                console.log("扫描回复ing...");
            }, 3000);
 
        alert("自动回复启动");
        console.log("自动回复启动");
    else {
        //停止
        clearInterval(GSid);
        alert("自动回复停止");
        console.log("自动回复停止");
    }
    sendResponse({
        farewell : "contentScript 收到了消息"
    });
});
 
//对插件发送消息
function sendToExtension(item, callbackFun) {
    console.log("send request");
    chrome.extension.sendRequest({
        text : item.text,
        nick : item.nick
    }, function (response) {
        var reply = response.reply;
        var content = response.dstContent;
        console.log(reply);
        if (callbackFun)
            callbackFun(content, reply);
    });
}
 
//微信操作对象 var wx = new WX();
function WX() {
 
    var thisObj = this;
 
    //微信所有者
    this.wxOwner = function () {
        return $(".display_name").text();
    };
 
    //获得最新的回复内容
    this.getReply = function () {
        var reply = {};
        var $lst = $("[ng-switch] .you"); //未回复的列表
        var $info = $lst.not('[reply]').first(); //未回复的记录
        if ($info != null && $info.length > 0) {
            reply["text"] = $info.find(".js_message_plain").text(); //未回复的内容
            reply["nick"] = $info.find(".avatar").attr("title"); //未回复的备注名称
            reply["title"] = $info.parents('.chat_bd.scroll-wrapper:first').prev().find('.title_name').text(); //聊天框title
            reply["touser"] = $info.parents('[jquery-scrollbar]').attr('data-cm');
            reply["touser"] = JSON.parse(reply["touser"]).username;
            reply["index"] = $lst.index($info);
            reply["item"] = $info;
        }
        return reply;
    };
 
    //提交回复
    this.putReply = function (item, replyContent) {
        //$("#editArea").html("回复:[[" + dstContent + "]]        " + replyContent);
        //$(".btn_send").click();
        var json = tl.getJsonMsg(item.touser, "回复:[[" + item.text + "]]     " + replyContent);
        tl.sendMsg(json);
    };
 
    //已经回复过集合
    this.repliedArray = [];
 
    //判断是否回复过
    this.isReplied = function (obj) {
        var md5Str = faultylabs.MD5(obj.title + "" + obj.nick + "" + obj.text);
        if (!thisObj.repliedArray.contains(md5Str)) {
            return false;
        else {
            return true;
        }
    }
 
    //完成回复
    this.replyComplete = function (obj) {
        var md5Str = faultylabs.MD5(obj.title + "" + obj.nick + "" + obj.text);
        if (!thisObj.repliedArray.contains(md5Str)) {
            thisObj.repliedArray.push(md5Str);
        }
    }
 
    //重载处理回复列表
    this.reload = function (callbackFun) {
        var $lst = $("[ng-switch] .you"); //未回复的列表
        $.each($lst.not("[reply]"), function (idx, item) {
            var $info = $(item);
            var reply = {};
            if ($info != null && $info.length > 0) {
                reply["text"] = $info.find(".js_message_plain").text(); //未回复的内容
                reply["nick"] = $info.find(".avatar").attr("title"); //未回复的备注名称
                reply["title"] = $info.parents('.chat_bd.scroll-wrapper:first').prev().find('.title_name').text(); //聊天框title
                reply["touser"] = $info.parents('[jquery-scrollbar]').attr('data-cm');
                reply["touser"] = JSON.parse(reply["touser"]).username;
                reply["index"] = $lst.index($info);
                reply["item"] = $info;
            }
            if (thisObj.isReplied(reply))
                $(item).attr("reply""");
            if (callbackFun)
                callbackFun();
        });
    }
 
    //打开最新的聊天框
    this.openLatestRoom = function () {
        $("[ng-repeat='chatContact in chatList track by chatContact.UserName'] .chat_item .icon:first").click();
    }
}
 
//数组拓展方法
Array.prototype.contains = function (obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}
 
//图灵对象
var tl = {
    getJsonMsg : function (activeroom, text) {
        var json = {
            "BaseRequest" : {
                "Uin" : +util.getCookie("wxuin"),
                "Sid" : util.getCookie("wxsid"),
                "Skey" : util.getSkey(),
                "DeviceID" : util.getDeviceID()
            },
            "Msg" : {
                "Type" : 1,
                "Content" : text,
                "FromUserName" : util.getFromUserName(),
                "ToUserName" : activeroom,
                "LocalID" : util.Now(),
                "ClientMsgId" : util.Now()
            }
        };
        return json;
    }, //
    sendMsg : function (json, cbfunc) {
        var jsonStr = JSON.stringify(json);
        $.ajax({
            url : 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg',
            data : jsonStr,
            type : 'POST',
            dataType : 'json',
            success : function (d) {
                if (cbfunc)
                    cbfunc(d);
            }
        });
    //
}; //
 
//工具包
var util = {
 
    getDeviceID : function () {
        return "e" + ("" + Math.random().toFixed(15)).substring(2, 17)
    },
    Now : function () {
        return  + (+new Date + "" + Math.round(Math.random() * 10000))
    }, //
    getCookie : function (e) {
        for (var t = e + "=", o = document.cookie.split(";"), n = 0; n < o.length; n++) {
            for (var r = o[n]; " " == r.charAt(0); )
                r = r.substring(1);
            if (-1 != r.indexOf(t))
                return r.substring(t.length, r.length)
        }
        return ""
    }, //
    getSkey : function () {
        var src = $(".main_inner .header .avatar img").attr("src");
        var result = /\@crypt_.{0,41}/.exec(src);
        return result != null && result.length > 0 ? result[0] : "";
    },
    getFromUserName : function () {
        var src = $(".main_inner .header .avatar img").attr("src");
        var result = /\&username=(\@.+?)\&/.exec(src);
        return result != null && result.length > 0 ? result[1] : "";
    }, //
    getActiveRoom : function () {
        var cmStr = $("[ng-repeat='chatContact in chatList track by chatContact.UserName'] .active").attr("data-cm");
        var json = JSON.parse(cmStr);
        return json != null && json.username != null ? json.username : "";
    //
}; //

manifest.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
    "name" "图灵机器人微信自动回复",
    "description" "图灵机器人微信自动回复",
    "version" "1.1",
    "background" : {
        "scripts" : ["jquery.min.js""md5.js""background.js"]
    },
    "content_scripts" : [{
            "matches" : ["https://*.qq.com/*","http://*.qq.com/*"],
            "js" : ["jquery.min.js""md5.js""content_script.js"]
        }
    ],
    "permissions" : [
        "tabs""http://*/*""https://*/*"
    ],
    "icons" : {
        "16" "icon.png",
        "48" "icon.png",
        "128" "icon.png"
    },
    "browser_action" : {
        "default_icon" "icon.png"
    },
    "homepage_url" "http://www.cnblogs.com/mahatmasmile/",
    "manifest_version" : 2
}

额外引用的插件:

jquery.min.js

md5.js

文件目录结构如下:

插件和源文件下载地址:

http://pan.baidu.com/s/1wPHy2

【chrome插件】web版微信接入图灵机器人API实现自动回复的更多相关文章

  1. Python使用微信接入图灵机器人

    1.wxpy库介绍 wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展. 文档地址:https://wxpy.readthedocs.io 从 PYPI 官 ...

  2. 个人微信接入图灵机器人(基于Python)

    编程语言:Python2.7 1.在图灵机器人官网(http://www.tuling123.com)注册账号, 创建机器人, 如果只是学习的话,可以使用2免费版 , 一个账号最多可以创建5个机器人 ...

  3. 个人微信接入图灵机器人(python版)

    准备工作 itchat,requests 注册图灵账号,创建机器人,获取API-KEY 代码实现 import itchat from itchat.content import * import j ...

  4. 使用图灵机器人api搭建微信聊天机器人php实现

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  5. Chrome插件-网页版BusHound

    Chrome插件-网页版BusHound

  6. Delphi 实现 图灵机器人API(IDHTTP POST )

    此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号. 申请方法请自行百度“图灵机器人”  . 登录账号后,在左侧的[机器人接入],获取需要的信息,记得 ...

  7. 使用图灵机器人API实现聊天机器人

    使用图灵机器人的API需要先注册,获取key才行,这我就不说了,自己到http://www.tuling123.com/注册一个账号即可. 下面就是一个简单的python调用API实现聊天机器人的简易 ...

  8. 调用图灵机器人API实现Android智能机器人

    非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353 下 ...

  9. 图灵机器人api的使用方法含微信版本和网页版

    访问图灵机器人官网http://www.tuling123.com/ 注册一个新的机器人账号 注册成功后转到主页 点击我的机器人>创建机器人>微信机器人 填写基本信息 点击微信介入> ...

随机推荐

  1. Docker使用

    Docker使用注意 关于网络配置   在使用默认的桥接模式下,容器启动后会被分配一个与docker0在同一网段的地址,在容器内部默认显示为eth0,在宿主机上产生一个临时的vethXXX接口. 端口 ...

  2. NodeJs + mongodb模块demo

    代码比较通俗易懂,但是我还是在这个过程中浪费了不少时间,也算是看到了nodejs中异步的一个小坑.未来的坑还有很多,慢慢找坑填坑吧. 参考资料如下: 1.断言模块 : https://nodejs.o ...

  3. Hibernate的session缓存和对象的四种状态

    一.session缓存 说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了 而hibernate获取一个对象后,会将对象存入s ...

  4. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  5. 2012-2013 ACM-ICPC Northeastern European Regional Contest (NEERC 12)

    Problems     # Name     A Addictive Bubbles1 addictive.in / addictive.out 2 s, 256 MB    x438 B Blin ...

  6. iOS中常用属性的关键字的使用说明

    属性关键字的作用 现在我们iOS开发中,基本都是使用ARC(自动引用计数)技术,来编写我们的代码.因此在属性property中我们经常使用的关键字有strong,weak,assign,copy,no ...

  7. bzoj1003 物流运输

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  8. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  9. 最大堆 最小堆 解决TOPK问题

    堆:实质是一颗完全二叉树,最大堆的特点:父节点值均大于子节点:最小堆的父节点值均小于子节点: 一般使用连续内存存储堆内的值,因而可以根据当前节点的索引值推断子节点的索引值: 节点i的父节点为(i-1) ...

  10. Java NIO 系列教程

    http://www.iteye.com/magazines/132-Java-NIO