教你用Python写一个聊天机器人

程序员有三种美德:懒惰,急躁和傲慢

要想实现功能我们需要首先认识一个库,itchat

itchat是一个开源的微信个人号接口,通过它你只需要编写简单的代码便能实现复杂的功能

如果你没有安装过它,你可以使用下面的命令来安装它

pip install itchat

 通过它我们可以实现微信的登陆,查找好友,发送消息等功能

itchat.auto_login(hotReload=True)

通过这行代码可以实现登陆功能,程序运行会弹出来一个二维码,使用微信扫描登陆,hotReload参数设置为True可以在你再次登录时不用再扫码了

itchat.send("hello world",toUserName="filehelper")

通过这行代码你可以给文件助手发一条消息,第一个参数便是要发送的消息,第二个参数是发送的对象,如果你要给好友发送消息可以替换为好友的微信名,注意这里的微信名不是微信昵称,是微信标识用户的唯一码

itchat.get_friends()

可以使用get_friends()方法取得好友列表,可以像数组一样取值,这里放一个示例

{'MemberList': , 'Uin': 0, 'UserName': '@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650', 'NickName': '和平鸽', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=626970063&username=@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650&skey=@crypt_142f8be9_97eca2622ea914f15dfb81624b0f87c4', 'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '刘鹏翼爸', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'HPG', 'PYQuanPin': 'hepingge', 'RemarkPYInitial': 'LPYB', 'RemarkPYQuanPin': 'liupengyiba', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 4133, 'Province': '', 'City': '', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}
 

这便是一个好友的json数据,可以通过键值对取值

nickname=itchat.get_friends()[1]["NickName"]
username=itchat.get_friends()[1]["UserName"]
print(nickname)
print(username)

和平鸽
@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650

itchat.send("hello world",toUserName=username)

使用send给指定的人发送消息

如果要做一个会自动回复的机器人的话这还不够,我们还需要监听他人给自己发送的消息,并根据消息进行回应

@itchat.msg_register('Text')
def text_reply(msg):
    if msg["Text"]=="你好":
        return "你也好"
    else:
        return "[自动回复]我现在不在,稍后联系您"

itchat提供了对各种消息的监听,上面这段代码便是实现了对文本类型的监听,传进来的msg同样也是一个json,里面包含了各种信息,对方的微信id,昵称,所在地,个性签名,发送的消息等等,放个例子

{'MsgId': '4153708636229259599', 'FromUserName': '@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b', 'ToUserName': '@c5eb5cea3c09059ca44ef1b53e791227695acd222f9b74a0760351f8d9a6a6c8', 'MsgType': 1, 'Content': '嗨', 'Status': 3, 'ImgStatus': 1, 'CreateTime': 1542370367, 'VoiceLength': 0, 'PlayLength': 0, 'FileName': '', 'FileSize': '', 'MediaId': '', 'Url': '', 'AppMsgType': 0, 'StatusNotifyCode': 0, 'StatusNotifyUserName': '', 'RecommendInfo': {'UserName': '', 'NickName': '', 'QQNum': 0, 'Province': '', 'City': '', 'Content': '', 'Signature': '', 'Alias': '', 'Scene': 0, 'VerifyFlag': 0, 'AttrStatus': 0, 'Sex': 0, 'Ticket': '', 'OpCode': 0}, 'ForwardFlag': 0, 'AppInfo': {'AppID': '', 'Type': 0}, 'HasProductId': 0, 'Ticket': '', 'ImgHeight': 0, 'ImgWidth': 0, 'SubMsgType': 0, 'NewMsgId': 4153708636229259599, 'OriContent': '', 'EncryFileName': '', 'User': , 'Uin': 0, 'UserName': '@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b', 'NickName': '不念过去', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=676888997&username=@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b&skey=@crypt_142f8be9_97eca2622ea914f15dfb81624b0f87c4', 'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '魏鹏楠', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '不畏将来,不念过去。', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'BNGQ', 'PYQuanPin': 'bunianguoqu', 'RemarkPYInitial': 'WPN', 'RemarkPYQuanPin': 'weipengnan', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 33561469, 'Province': '河北', 'City': '邯郸', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}>, 'Type': 'Text', 'Text': '嗨'}
 

我们通过text取到他发送给我们的信息并根据信息进行回复

@itchat.msg_register('File')
def file_reply(msg):
    return "抱歉,还不会读文件"

我们还可以对文件类型的信息进行监听,还有PICTURE, RECORDING, ATTACHMENT, VIDEO等等类型的信息,这里不做过多介绍

现在我们知道了如何监听和如何发送消息,但是如果想上面那样写句子判断你肯定是写不完的,这时候我们可以采用api来应对

使用图灵机器人便可以实现这样的功能

教你用Python写一个聊天机器人_第1张图片

教你用Python写一个聊天机器人_第2张图片

图灵机器人官网:http://www.tuling123.com

我们可以使用它开放的api进行应答,使用requests来进行post请求,没学过也没好关系,也就一句话的代码

url="http://www.tuling123.com/openapi/api"
key="720b8495c39f40ac92284c5d6b3d1dd7"
msg="你好漂亮"
userid="100000"
data={
    'key':key,
    'info':msg,
    'userid':userid
}
repson=requests.post(url,data=data).json()
print(repson.get("text"))

回复 :呵呵,还好啦,一般般啦

这是我图灵机器人的key,大家尽管拿去用

现在应答也解决了,只要把监听,发送消息,回复内容三部分一结合就好了,最后附上完整代码

import itchat
import requests
url="http://www.tuling123.com/openapi/api"
key="720b8495c39f40ac92284c5d6b3d1dd7"

@itchat.msg_register("Text")
def text_reply(msg):
    return get_reply(msg["Text"])

def get_reply(msg):
    print(msg)
    repson=requests.post(url+"?key="+key+"&info="+msg).json()
    print(repson)
    return repson.get("text")

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

 

你可能感兴趣的:(Python,Python基础)