美文网首页虫虫
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