python微信聊天机器人

本文介绍如何使用Python的wxpy库实现微信自动回复功能,包括指定回复特定用户、关键词触发及利用图灵机器人API提供多样化回复。

上回逗汁儿的朋友豆苗为了哄女朋友开心,爬了一堆的笑话让我来给处理一下,今天这货又来找我了,真是无事不登三宝殿啊,事情是这样的。

豆苗:逗汁儿啊,上次你的方法很不错,让我节约了很多时间,为了感谢你,请你吃个饭啊。

逗汁儿:算你有良心。

吃饭ing

豆苗:那个,逗汁儿啊,其实还有一事相求啊。

逗汁儿:……

豆苗:上次那个笑话啊,我感觉每天发太累了,我想让微信自动发。你看能不能……

逗汁儿:。。。。。,消息都懒得发,下次媳妇我也帮你娶了呗?

 

实在耐不住豆苗的劝说,也所谓拿人手短,吃人嘴短嘛,我就去研究了一下,如何让微信自动回复呢?

 

经过度娘的检索,发现python是可以做到的!python可以通过调用itchat和wxpy库来进行微信的相关处理。可以进行各种模拟操作,常见的微信机器人就可以用它来制作

查了一下库代码,wxpy是基于itchat来运行的。想了一下seaborn和matplotlib的关系,我决定选择wxpy库来开始制造我们的初级微信机器人吧。

一.Wxpy初体验:

首先复习一下库的导入,库除了import 库名外,还有一个导入方法from 库名 import 方法

import wxpy

from wxpy import *

这两种方法都可以导入wxpy的所有内容,后者更好一些,比如说beautifulsoup库比较大,我们只用到BS4,那我们就可以只输入from wxpy import BS4,即可只导入BS4这部分,降低程序的臃肿程度。

 

Wxpy主要通过网页微信来进行操作的,所以它可以执行web微信的大部分的功能,这里面也要注意一下,因为微信的设置,新申请的账号无法使用web微信,如果用新微信扫码的话,会报错KeyError: 'pass_ticket',这就代表不能用这个微信作为机器人启动。

导入了库之后,我们就要激活或者说初始化机器人

bot = Bot()

会弹出来一个二维码,扫描二维码,这样你的微信就被wxpy操控了

这里每次执行的时候都会要扫码,最开始的时候也很头痛,这个是为什么执行就要扫码?有没有替代的可能呢?通过查阅文档,可以通过增加参数才行

Bot(cache_path = True) #使用默认缓存路径’wxpy.pkl’

Bot(cache_path = ‘A:\\B\\robot.pkl’) #这种是设置路径的

设置完路径后会出现一个新文件

                                                             

IDE会提示你已经登录了,如果出现以下提示则可以认为是成功

                              

成功接管了微信之后,我们试下能不能发消息,那首先试试看能不能给文件助手发消息,这样的话,还能不打扰别人(我不会说是我现在不知道怎么找好友)

 

bot.file_helper.send('hello,world')

结果:     

真的发送到手机上面去了!!

二.指定回复

好,因为豆苗说,只想让他女朋友自动回复笑话这些功能,那别人聊天不能自动回复啊,所以要专门用来回复女朋友的,首先第一步我们要找一下,我的朋友里面有哪些人

Bot.friends()

结果

,我们可以看到这个里面的排列的顺序并不是按照微信名字顺序来的,那我们实验一下,再次获取会不会一样呢?如果可以的话,我们就可以根据每次输出的顺序来确定女朋友在哪里了

真的是一样的,那这个如果从新登陆会不会不同了呢?

经过测试都相同,那我们的一个办法就是可以根据位置来测试,假设女朋友的微信昵称为测试对象001,我们看到位置在第二个,测试方法是向它发送一个消息。

bot.friends()[1].send('你好')

真的发送过来了!!看来这个方法可行,但是经过我的长期测试,发现并不是每次都OK的,如果这个从新扫码之后,这个顺序还是会变化的,那怎么办呢?

我们可以通过查找的方式来找到对应的名字

bot.friends().search('测试对象001')

返回结果:[<Friend: 测试对象001>]

 

那能不能继续呢?

bot.friends().search('测试对象001').send('你好2')

结果出现了报错:AttributeError: 'Chats' object has no attribute 'send'

 

说chats这个类没有send这个结果,那这个我们确实找到了好友,但是不能发消息也不行啊~其实只需要让电脑找到这个人就行了,变成下面的代码就可以了

bot.friends().search('测试对象001')[0].send('你好2')

输出结果: 测试对象001 : 你好2 (Text)

 

看来这个问题也解决了,我们可以找到针对专人的发送消息的方法了。这个就太棒了

 

但是这个还不够啊,目前还是手动的,还点能自动回复才可以啊

先给测试对象001叫做TestFriend,

TestFriend = bot.friends().search('测试对象001')[0]

 

接着要设置一个,让它只能自动回复测试001的话,而不会自动回复其他人的话,目前是最初阶的机器人,无法识别非文本信息,那我们就要写一个,非文本信息回复不能识别的消息,那文本信息既然是女朋友,就自动回复:在的,宝贝,测试时候用你好代替要不太肉麻了。

@bot.register(TestFriend)

def AutoReturnMessage(msg):

    print('[接收]' + str(msg))

    if msg.type != 'Text': #非文本消息回复

        ret = '无法识别‘

    else:

        ret = '你好'

    print('[发送]' + str(ret))

    return ret

 

我们下面来测试一下

 

成功了,我用测试001成功让它自动回复了,那我试试别的测试账号

用测试012回复后,果然没有任何反应。又成功了,这次连回复都显示不出来。。

好,那我们就要测试下一部分了。如何回复笑话?

我想到了指定关键词

先来试试看

@bot.register(TestFriend)

def AutoReturnMessage(msg):

    print('[接收]' + str(msg))

    if msg.type != 'Text': #非文本消息回复

        ret = '无法识别'

    elif "你是谁" in str(msg): #笑话备用版

        ret = "我是人工智障机器人"

    else:

        ret = '你好'

    print('[发送]' + str(ret))

    return ret

结果如下

搞定,可以根据指定关键词回复了!!

这次可以让豆苗的女朋友说:笑话,就会自动说笑话了,但是每次只回复一个笑话有些无聊,那能不能换笑话呢?

经过我的冥思苦想,感觉理论上是可以操作的,但是技术还没达到这种程度,所以就去研究了一下,有没有别的可以操作的呢?

 

答案是有的!有个现成的机器人任你摆布,并且每日可以聊一千条!!算了算,估计豆苗的女朋友应该不会这么无聊每日召唤1000次豆苗啊~所以我就开始动手了

 

首先去tuling123.com申请一个图灵机器人,之后得到APIKEY。

因为图灵机器人是用requests库来进行返回的,而且格式是json格式,那需要我们额外引入两个库

Import requests

Import json

然后输入下面的代码

def tuling(info):

    key="自己的APIKEY"

    url = "http://www.tuling123.com/openapi/api?key=%s&info=%s"%(key,info)

    req = requests.get(url)

    content = req.text

    data = json.loads(content)

    answer = data['text']

    return answer

tuling("你好") #测试机器人可用

 

结果返回为:'你好我好大家好',测试成功,这个是图灵机器人内置的内容,可以通过语料库更改
@bot.register(TestFriend)
def text_reply(msg):
   msg.reply('%s' % tuling(msg))

 
直接和机器人聊天


现在终于成功了,
看看能不能讲笑话


连查询天气都可以!!


成功完成豆苗的求助,这也打开了我的新世界的大门啊~这个可以用来回复笑话,那是不是也可以用来加好友,参与群聊呢??一个更大的世界大门向我打开了~

关注公众号:DC学习助手,获取更多数据科学知识

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值