失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【微信聊天机器人】基于python实现的PC端个人微信聊天机器人

【微信聊天机器人】基于python实现的PC端个人微信聊天机器人

时间:2021-04-27 16:01:49

相关推荐

【微信聊天机器人】基于python实现的PC端个人微信聊天机器人

文章目录

前言一、运行环境二、使用步骤1.引入库2.根据文本内容自动生成回复3.接收消息的回调函数4.启动客户端5.程序入口三、代码全文总结

前言

微信自动回复、聊天机器人应该是一个很多人迫切需要的功能(如时间管理大师),网上能搜到的大多解决方案是采用之前的基于Web版微信的itchat或wxpy第三方库,但现在申请注册比较晚的微信号无法登录Web版微信,故上述两个库均已失效。还有一些需要注入dll手段的,操作比较麻烦不适合新手。

本文用python提供一种解决方案初代版本,只需调包,无需对系统进行其他操作,可根据自身需要定制内容。

温馨提示:仅供娱乐,请谨慎使用,由自身使用不当引起家庭矛盾、跟上级领导关系不和等各种不良后果,本文作者概不负责。

该机器人支持天气查询、成语接龙、彩虹屁等功能,可在天行控制台进行定制。

效果展示:


提示:以下是本篇文章正文内容,下面案例可供参考

一、运行环境

Windows10+python 3.7.4+PC端微信V2.7.1.82版本+PyCharm/VS

提示:python版本一定要是3.7及以后;微信版本目前仅支持V2.7.1.82版本

PC端微信V2.7.1.82版本安装包百度网盘下载链接:/s/1yADEwqht8hcTTjxpkW8DXw 提取码:rneo

二、使用步骤

1.引入库

代码如下(示例):

from WechatPCAPI import WechatPCAPIimport timeimport http.client, urllib

所用库的说明和下载地址:

/terrywangt/WeChatBot

/apiview/47

第二个网址为天行公司的网址,免费申请注册可以获得接口,有示例代码

2.根据文本内容自动生成回复

代码如下(示例):

# #生成回复内容的函数,传入的是接收到的字符串,返回值为回复strdef send_msg_producer(content):conn = http.client.HTTPSConnection('') # 接口域名params = urllib.parse.urlencode({'key': '你在天行网站上申请获得的APIKEY', 'question': content})headers = {'Content-type': 'application/x-www-form-urlencoded'}conn.request('POST', '/robot/index', params, headers)res = conn.getresponse()data = res.read()str_data = data.decode('utf-8') # 报文解码返回值为str,转为dict再操作dict_data = eval(str_data)out_content = dict_data['newslist'][0]['reply'] #将要回复消息读取出来,作为返回值return out_content

该函数传入的参数content为你对机器人的提问,str类型(也就是微信收到的新消息字符串);返回值为机器人根据上文自动生成的回复,str类型。

注意:代码中的key需要填上你在天行网站上申请到的key

3.接收消息的回调函数

代码如下(示例):

# 接收消息的回调函数,可自行定义def on_message(message):print(message)msg_obj = messageprint(msg_obj['type'])# #----------------------------------------------------------------------个人聊天if msg_obj['type'] == 'msg::single':name_id = msg_obj['data']['from_wxid']send_or_recv=msg_obj['data']['send_or_recv'][0]content = msg_obj['data']['msg']# #---------------------------------------# #打印输出测试print(name_id)print(send_or_recv)print(content)if (send_or_recv == '0') and (name_id == '你想启用自动回复的目标1' or name_id == '你想启用自动回复的目标2' or name_id == '你想启用自动回复的目标3'):# #判定通过print('该个人节点已通过')# #封装的生成输出内容的函数out_content = send_msg_producer(content)# ---------------------------------------------------------发送输出wx_inst.send_text(to_user=name_id, msg= '主人让我对你说:\n' + str(out_content) )# #-------------------------------------------------------------------------------------群聊设置elif msg_obj['type'] == 'msg::chatroom':chatroom_id = msg_obj['data']['from_chatroom_wxid']send_or_recv = msg_obj['data']['send_or_recv'][0]content = msg_obj['data']['msg']# ---------------------------------------# 打印输出测试print(chatroom_id)print(send_or_recv)print(content)if (send_or_recv == '0') and (chatroom_id == '你想启用自动回复的目标1' or chatroom_id == '你想启用自动回复的目标2'): # #判定通过print('该群聊节点已通过')# #调用内容生成函数out_content = send_msg_producer(content)# ---------------------------------------------------------发送输出wx_inst.send_text(to_user=chatroom_id, msg='主人让我对你说:\n' + str(out_content))return None

每当收到新消息时,就会触发回调函数。示例中的回调函数内容为个人和群聊两部分,需要在if判定条件里填入你想进行自动回复的目标。注意:填入的目标id一定要为原始id,比如个人的微信号格式为wxid_1122334455asdf,微信号更改后的那个id不可以,群聊的微信号格式为1122334455@chatroom,如何才能知道某个人的原始微信号,可以百度,也可以直接看WechatPCAPI接受到信息的报文,不赘述。

代码中部分用于测试输出的语句我没有注释掉,不影响运行结果,同时可以让你可以很清楚的看到,当微信收到新消息时,你的程序都进行了哪些操作


4.启动客户端

def main():# 启动微信 目前仅支持微信V2.7.1.82wx_inst.start_wechat(block=True)# 等待登陆成功,此时需要人为扫码登录微信while not wx_inst.get_myself():time.sleep(5)# 登录成功了print(wx_inst.get_myself())time.sleep(10)# 更新所有好友信息,数据会通过上面的回调函数返回wx_inst.update_frinds()

5.程序入口

wx_inst = WechatPCAPI(on_message=on_message)main()

程序从此处开始执行,也可以写为if__name__== ’ __main __’:的方式来执行

三、代码全文

from WechatPCAPI import WechatPCAPIimport timeimport http.client, urllibdef send_msg_producer(content):conn = http.client.HTTPSConnection('') # 接口域名params = urllib.parse.urlencode({'key': '你在天行网站上申请获得的APIKEY', 'question': content})headers = {'Content-type': 'application/x-www-form-urlencoded'}conn.request('POST', '/robot/index', params, headers)res = conn.getresponse()data = res.read()str_data = data.decode('utf-8') # 报文解码返回值为str,转为dict再操作dict_data = eval(str_data)out_content = dict_data['newslist'][0]['reply'] #将要回复消息读取出来,作为返回值return out_contentdef on_message(message):print(message)msg_obj = messageprint(msg_obj['type'])# #----------------------------------------------------------------------个人聊天if msg_obj['type'] == 'msg::single':name_id = msg_obj['data']['from_wxid']send_or_recv=msg_obj['data']['send_or_recv'][0]content = msg_obj['data']['msg']# #---------------------------------------# #打印输出测试print(name_id)print(send_or_recv)print(content)if (send_or_recv == '0') and (name_id == '你想启用自动回复的目标1' or name_id == '你想启用自动回复的目标2' or name_id == '你想启用自动回复的目标3'):# #判定通过print('该个人节点已通过')# #封装的生成输出内容的函数out_content = send_msg_producer(content)# ---------------------------------------------------------发送输出wx_inst.send_text(to_user=name_id, msg= '主人让我对你说:\n' + str(out_content) )# #-------------------------------------------------------------------------------------群聊设置elif msg_obj['type'] == 'msg::chatroom':chatroom_id = msg_obj['data']['from_chatroom_wxid']send_or_recv = msg_obj['data']['send_or_recv'][0]content = msg_obj['data']['msg']# ---------------------------------------# 打印输出测试print(chatroom_id)print(send_or_recv)print(content)if (send_or_recv == '0') and (chatroom_id == '你想启用自动回复的目标1' or chatroom_id == '你想启用自动回复的目标2'): # #判定通过print('该群聊节点已通过')# #调用内容生成函数out_content = send_msg_producer(content)# ---------------------------------------------------------发送输出wx_inst.send_text(to_user=chatroom_id, msg='主人让我对你说:\n' + str(out_content))return Nonedef main():# 启动微信 目前仅支持微信V2.7.1.82wx_inst.start_wechat(block=True)# 等待登陆成功,此时需要人为扫码登录微信while not wx_inst.get_myself():time.sleep(5)# 登录成功了print(wx_inst.get_myself())time.sleep(10)# 更新所有好友信息,数据会通过上面的回调函数返回wx_inst.update_frinds()wx_inst = WechatPCAPI(on_message=on_message)main()

总结

所提供的代码只是一个最简单的示例,还有很多改进的空间。比如创建一个dict来存储需要自动回复的对象的微信id,然后通过创建一个简单的UI窗口来实现对该dict的增删。采用跟本文一致的环境的话应该不会产生额外的环境问题,如有问题请参照本文2.1节给出的两个链接。机器人回复的效果也可以提升,本文采用的是天行提供的免费试用版库,普通用户每天可以免费调用接口100次,也可以自行购买别的库来使用,如腾讯云。回复中“主人让我对你说:”是额外添加的标志词,从而来区分机器人发的消息和本人发的消息,想要以假乱真可将该提示去掉。

感谢免费提供库的作者和公司。

如果觉得《【微信聊天机器人】基于python实现的PC端个人微信聊天机器人》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。