Python开发入门(三) |
您所在的位置:网站首页 › 微信上有个机器人 › Python开发入门(三) |
通过微信的Python接口itchat获取微信消息。 将微信消息传输到机器人接口,获取机器人的返回消息。 将返回消息返回给微信消息的发送人。 实现将微信个人号变为聊天机器人的目的。 安装方式一:可以通过pip安装itchat: pip install itchat方式二: 用pycharm 在"setting"里安装:
要通过 itchat 操作微信接收、发送信息等,第一步需要先登陆微信网页版,为此 itchat 提供了 auto_login 方法,调用这个方法就能实现微信登陆 import itchat from itchat.content import TEXT @itchat.msg_register(itchat.content.TEXT) # 注册处理文本信息 def print_content(msg): # 通过装饰符将print_content注册为处理文本消息的函数。 print(msg['Text']) itchat.auto_login() # hotReload=True表示短时间关闭程序后可重连 itchat.run()微信有各种类型的数据,例如图片、语音、名片、分享等,也对应不同的注册参数: 图片对应: itchat.content.PICTURE语音对应: itchat.content.RECORDING名片对应: itchat.content.CARD… 执行成功后开始登陆微信,这时会生成一个名为 QR.png 的二维码图片文件,通过扫描这个二维码就可以登陆微信网页版了,这时将会显示如下信息: Login successfully as 你登陆账号的微信昵称 Start auto replying. 关于登陆: itchat提供了登陆状态暂存,关闭程序后一定时间内不需要扫码即可登录。只需要在 auto_login 方法中传入 hotReload=True 即可。为了方便在无图形界面使用itchat,程序内置了命令行二维码的显示。只需要在 auto_login 方法中传入 enableCmdQR=True 即可。可以自定义登陆,比如更改提示语、二维码出现后邮件发送等。 自定义登陆所需要的方法,登陆顺序为 获取二维码uuid,方法名称:get_QRuuid获取二维码,方法名称:get_QR判断是否已经登陆成功,方法名称:check_login获取初始化数据,方法名称:web_init更新微信相关信息(通讯录、手机登陆状态),方法名称:get_friends、show_mobile_login循环扫描新信息(开启心跳),方法名称:start_receiving 注册消息方法itchat 将根据接收到的消息类型寻找对应的已经注册的方法,如果一个消息类型没有对应的注册方法,该消息将会被舍弃,就像我们上面代码只注册了TEXT 类型的消息才会被打印出来。当然在运行过程当中也可以动态注册方法,注册方式与结果不变。 各类型消息的注册注册消息有两种方法: 不带具体对象注册,将注册为普通消息的回复方法带对象参数注册,对应消息对象将调用该方法 实例1: import itchat from itchat.content import TEXT # 不带具体对象注册,将注册为普通消息的回复方法 @itchat.msg_register(TEXT) def simple_reply(msg): return 'I received: %s' % msg['Text'] # 带对象参数注册,对应消息对象将调用该方法 @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=False) def text_reply(msg): msg.user.send('%s: %s' % (msg.type, msg.text)) itchat.auto_login(hotReload=True) itchat.run()实例2: import itchat, time from itchat.content import * @itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING]) def text_reply(msg): msg.user.send('%s: %s' % (msg.type, msg.text)) @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) typeSymbol = { PICTURE: 'img', VIDEO: 'vid', }.get(msg.type, 'fil') return '@%s@%s' % (typeSymbol, msg.fileName) @itchat.msg_register(FRIENDS) def add_friend(msg): msg.user.verify() msg.user.send('Nice to meet you!') @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): if msg.isAt: msg.user.send(u'@%s\u2005I received: %s' % ( msg.actualNickName, msg.text)) itchat.auto_login(True) itchat.run(True) 注册消息优先级多次注册同一类型消息时,遵循以下规则: 后注册消息先于先注册消息带参数消息先于不带参数消息依据这两个规则,上例1代码只执行第二个带参数注册的方法就很正常了,另外 itchat 还支持动态注册消息,一种方法是生成一个守护线程动态注册消息,另一种是使用 configured_reply 方法 消息内容itchat 支持微信回复的以下几种类型的消息,包括:微信初始化消息、文本消息、图片消息、小视频消息、地理位置消息、名片消息、 语音消息、动画表情、普通链接和应用分享、音乐链接、群消息、红包消息、系统消息。 文本消息文本消息是最常见的消息,基本格式如下: MsgType: 1 # 消息类型 FromUserName: 发送方ID ToUserName: 接收方ID Content: 消息内容 图片消息 MsgType: 3 # 消息类型 FromUserName: 发送方ID ToUserName: 接收方ID MsgId: 用于获取图片 Content: 小视频消息 MsgType: 62 # 小视频消息 FromUserName: 发送方ID ToUserName: 接收方ID MsgId: 用于获取小视频 Content:… 消息回复itchat 提供了五种消息回复的方法: send方法 import itchat # 可发送多种类型消息 itchat.send(msg='文本消息', toUserName=None) itchat.send('@img@%s' % '表情图片.gif') itchat.send('@fil@%s' % '文件.docx') itchat.send('@vid@%s' % '测试.mp4')参数说明: msg:消息内容。’@fil@文件地址’将会被识别为传送文件,’@img@图片地址’将会被识别为传送图片,’@vid@视频地址’将会被识别为小视频。toUserName:发送对象,如果留空将会发送给自己。返回值: 发送成功:True失败:False send_msg方法 send_msg(msg='文本消息', toUserName=None)参数说明: msg:消息内容,仅文本toUserName:发送对象,如果留空将会发送给自己返回值: 发送成功:True失败:False send_file、send_img、send_video方法 send_file(fileDir, toUserName=None) send_img(fileDir, toUserName=None) send_video(fileDir, toUserName=None)参数说明: fileDir:文件路径(不存在该文件时将打印无此文件的提醒)toUserName:发送对象,如果留空将会发送给自己返回值: 发送成功:True失败:False 用户搜索 & 账号类型主要好友、公众号、群聊。itchat 为这三种类型的账号分别提供了整体获取和根据条件搜索的方法 好友1、好友的获取方法为 get_friends,将会返回完整的好友列表: 其中每个好友为一个字典列表的第一项为本人的账号信息 -传入 update 键为 True 将可以更新好友列表并返回 2、好友的搜索方法为 search_friends,目前有如下四种搜索方式: 仅获取自己的用户信息获取特定UserName的用户信息获取备注、微信号、昵称中的任何一项等于name键值的用户获取备注、微信号、昵称分别等于相应键值的用户 其中3、4项可以一同使用,示例程序: # 获取自己的用户信息,返回自己的属性字典 itchat.search_friends() # 获取特定UserName的用户信息 itchat.search_friends(userName='@abcdefg1234567') # 获取任何一项等于name键值的用户 itchat.search_friends(name='littlecodersh') # 获取分别对应相应键值的用户 itchat.search_friends(wechatAccount='littlecodersh') # 3、4项功能可以一同使用 itchat.search_friends(name='LittleCoder机器人', wechatAccount='littlecodersh')3、更新用户信息的方法为 update_friend,该方法需要传入用户的 UserName,返回指定用户的最新信息。当然也可以传入 UserName 组成的列表,那么相应的也会返回指定用户的最新信息组成的列表。 公众号1、公众号的获取方法为 get_mps,将会返回完整的公众号列表: 其中每个公众号为一个字典传入 update 键为 True 将可以更新公众号列表并返回 2、公众号的搜索方法为 search_mps,有两种搜索方法: 获取特定 UserName 的公众号:search_mps(userName=‘公众号名’)获取名字中含有特定字符的公众号,返回值为一个字典的列表:search_mps(name=‘littleboy’) 群聊1、群聊的获取方法为 get_chatrooms,将会返回完整的群聊列表: 其中每个群聊为一个字典传入 update 键为 True 将可以更新群聊列表并返回通讯录中保存的群聊列表群聊列表为后台自动更新,如果中途意外退出存在极小的概率产生本地群聊消息与后台不同步为了保证群聊信息在热启动中可以被正确的加载,即使不需要持续在线的程序也需要运行 itchat.run()如果不想要运行上述命令,请在退出程序前调用 itchat.dump_login_status(),更新热拔插需要的信息2、群聊的搜索方法为 search_chatrooms,有两种搜索方法,分别是通过传参 userName 和 name 进行搜索,方式同公众号搜索相似。 3、群聊用户列表的获取方法为 update_chatroom,同时需要关注以下几点: 如果想要更新该群聊的其他信息也可以用该方法群聊在首次获取中不会获取群聊的用户列表,所以需要调用该命令才能获取群聊的成员该方法需要传入群聊的 UserName,返回特定群聊的详细信息同样也可以传入 UserName 组成的列表,那么相应的也会返回指定用户的最新信息组成的列表 4、创建、增加、删除群聊用户的方法: memberList = itchat.get_friends()[1:] # 创建群聊,topic键值为群聊名 chatroomName = itchat.create_chatroom(memberList, '测试群聊') # 删除群聊内的群友 itchat.delete_member_from_chatroom(chatroomName, memberList[0]) # 增加好友进入群聊 itchat.add_member_into_chatroom(chatroomName, memberList[0], useInvitation=False) 命令行二维码通过以下命令可以在登陆的时候使用命令行显示二维码: itchat.auto_login(enableCmdQR=True)可以通过将enableCmdQR赋值为特定的倍数进行调整: itchat.auto_login(enableCmdQR=2)默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值: itchat.auto_login(enableCmdQR=-1) 退出程序后暂存登陆状态过如下命令登陆,即使程序关闭,一定时间内重新开启也可以不用重新扫码。类似于休眠 通 itchat.auto_login(hotReload=True) 附件的下载与发送itchat的附件下载方法存储在msg的Text键中。 发送的文件的文件名(图片给出的默认文件名)都存储在msg的FileName键中。 下载方法接受一个可用的位置参数(包括文件名),并将文件相应的存储。 如下: @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) itchat.send('@%s@%s' % ( 'img' if msg['Type'] == 'Picture' else 'fil', msg['FileName']), msg['FromUserName']) return '%s received' % msg['Type'] #如果你不需要下载到本地,仅想要读取二进制串进行进一步处理可以不传入参数,方法将会返回图片的二进制串。 @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): with open(msg.fileName, 'wb') as f: f.write(msg.download()) 用户多开可以完成类似于微信多开的操作: import itchat newInstance = itchat.new_instance() newInstance.auto_login(hotReload=True, statusStorageDir='newInstance.pkl') @newInstance.msg_register(TEXT) def reply(msg): return msg.text newInstance.run() 退出及登陆完成后调用特定方法登陆完成后的方法需要赋值在loginCallback中。而退出后的方法需要赋值在exitCallback中。 import time import itchat def lc(): print('finish login') def ec(): print('exit') itchat.auto_login(loginCallback=lc, exitCallback=ec) #若不设置loginCallback的值,则将会自动删除二维码图片并清空命令行显示 time.sleep(3) itchat.logout() itchat实现与图灵机器人的交互实现原理: 使用他人提供的接口实现 具体: 图灵机器人就是以一定的规则给图灵的服务器发送数据包(包含你对他说的话),图灵的服务器会以一定的规则给你返回数据包(包含他回复你的话),而你需要一个Tuling Key来告诉图灵服务器你有权和他对话,这里是官方免费提供的一些: 8edce3ce905a4c1dbb965e6b35c3834d eb720a8970964f3f855d863d24406576 1107d5601866433dba9599fac1bc0083 71f28bf79c820df10d39b4074345ef8c 关于图灵机器人图灵机器人API是在人工智能的核心能力(包括语义理解、智能问答、场景交互、知识管理等)的基础上,为广大开发者、合作伙伴和企业提供的一系列基于云计算和大数据平台的在线服务和开发接口。 开发者可以利用图灵机器人的API创建各种在线服务,灵活定义机器人的属性、编辑机器人的智能问答内容,打造个人专属智能交互机器人,也支持多渠道(微信公众平台、QQ聊天)的快速接入。 使用介绍:图灵机器人 回归正题 配置图灵机器人的简单介绍发送的规则如下实例: { 'key' : 'TULING_KEY', 'info' : 'YOUR_MSG', 'userid' : 'USERID', }其中userId是用户的标志,让机器人知道你是你,他是他。(也就是说一个Tuling Key可以有多个用户) 而返回的内容基本是这样的: { 'code': 0, 'text': 'RETURN_MSG', }实例: #coding=utf8 import requests apiUrl = 'http://www.tuling123.com/openapi/api' data = { 'key' : '8edce3ce905a4c1dbb965e6b35c3834d', # 如果这个Tuling Key不能用,那就换一个 'info' : 'hello', # 这是我们发出去的消息 'userid' : 'wechat-robot', # 用户id 可以修改 } # 通过如下命令发送一个post请求 r = requests.post(apiUrl, data=data).json() # 让我们打印一下返回的值,看一下我们拿到了什么 print(r)打印结果: 更多功能开发请参考官网… 参考资料:https://itchat.readthedocs.io/zh/latest/ |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |