美文网首页虫虫
python微信聊天机器人

python微信聊天机器人

作者: DC学院 | 来源:发表于2018-12-14 15:28 被阅读129次

上回逗汁儿的朋友豆苗为了哄女朋友开心,爬了一堆的笑话让我来给处理一下,今天这货又来找我了!。让我给他实现微信自动回复笑话。

如何让微信自动回复呢?

万事开头难,经过度娘的检索,发现python是可以做到的!

python可以通过调用itchat和wxpy库来进行微信的相关处理,进行各种模拟操作,常见的微信机器人就可以用它来制作。

查了一下库代码,wxpy是基于itchat来运行的,我决定选择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学习助手,获取更多数据科学有关知识

相关文章

网友评论

    本文标题:python微信聊天机器人

    本文链接:https://www.haomeiwen.com/subject/ldsghqtx.html