利用itchat写一个聊天机器人

聊天机器人

偶然在CSDN上看到大佬用20行教你写一个聊天机器人,觉得甚为有趣,所以就自己尝试了一下,在此记录并分享自己的学习过程。

图灵机器人

图灵机器人是可以自动回复的智能机器人,每个人都可以免费创建,很方便。官网为http://www.turingapi.com/。创建界面
创建好后可以看到提供了apikey值和api使用文档
在这里插入图片描述
点击进入使用文档可以找到API接入文档,可以看到接口地址,请求方式以及请求参数,具体参数也有表格给出。具体使用后面程序会详细讲解

在这里插入图片描述
通过调用API接口可以实现提取机器人的智能回复然后作为微信的自动回复,这就是我们这次小程序的目的

**

需要的库

**
该小程序需要用到以下两个库:
itchat:用来控制微信的库(可以通过pip install itchat安装)
requests:用来发起post请求获取到图灵机器人回复
`

自动回复私聊消息

导入需要的两个库`

import itchat
import requests

itchat库里用函数,具体可以参考官方文档,其中itchat.msg_register可以检测事件,参数itchat.content.TEXT检测的是文本信息,让我们先来看看捕获到的文本信息是什么格式。

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    print(msg)

在聊天界面发送了“测试”,输出为
在这里插入图片描述
可以看到键为Text的值为获取到的文本,定义获取机器人回复的函数,根据官方文档构造的请求如下:

def get_response(msg):
    apiUrl = 'http://openapi.tuling123.com/openapi/api/v2'
    data = {
	info = msg['Text']
	"reqType":0,  
    "perception": {
        "inputText": {
            "text": info   #传入的值为所捕获的文本信息
        }
    },
    "userInfo": {
        "apiKey": "9c434dd5f0f949ec90cf1384b2ad3a88",  #创建的机器人的apikey值
        "userId": "XXX"       #随便输入一个值都可以
    }
}
    response = requests.post(apiUrl, json=data).json()  #利用requests发送一个post请求
    print(response )
    return response.get('results')[0]['values']['text'] #提取机器人回复

输出为
在这里插入图片描述
我这里在写博客的时候请求次数已经超出了限制,不过不妨碍我们分析数据结构,results键值为一个列表,其中的values键值里的text键值就是机器回复,我们只需要把这部分数据提取出来并返回给控制台就可以做到自动回复了。这一部分代码如下

@itchat.msg_register(itchat.content.TEXT) #私聊消息
def text_reply(msg):
    print(msg.get('Text'))
    return get_response(msg)

自动回复群聊消息

想要捕获群消息事件,只需要添加isGroupChat=True得到参数即可,我是想要在群里被人@的时候做出自动回复,所以增加@的判断

@itchat.msg_register(itchat.content.TEXT,isGroupChat=True) #群消息
def group_text_reply(msg):
    print(msg['Text'])
    if "@KimihaSukiDa" in msg.get('Text'):     
        return get_response(msg)

我用了我的微信群昵称KimihaSukiDa,可以换成你所对应的群昵称。对应的获取机器人回复函数中也增加了判断:

 if "@" in msg['Text']:
        if msg.get('Text')[0] == "@":
            info = msg['Text'][14:]
        elif msg.get('Text')[-13] =="@":
            info = msg['Text'][:-14]
    else:
        info = msg['Text']

在此以常用的两种方式作为判断,当别人先@你后再发消息和发完消息在@你。捕获到的msg值是str类型,所以可以通过切片的方式截取到有效信息,我的这个昵称加上@有13个字符,所以捕获到的有效消息应该从第14个字符开始算,另一个情况同理。

**
最后加上开始程序,每次运行程序需要扫描二维码登录,不想每次扫码可以加上hotReload参数。

itchat.auto_login(hotReload=True)
itchat.run()

结语:

这是第一次写博客,不好的地方请见谅。至此,大家就可以去写自己的聊天机器人了,和自己的小伙伴玩玩这个可爱的机器人~**

猜你喜欢

转载自blog.csdn.net/weixin_40841243/article/details/92801879