之前了解到 itchat 乃至于 wxpy 时 是利用 tuling 聊天机器人的接口. 调用接口并保存双方的问答结果可以作为自己的问答词库的一个数据库累计. 这些数据可以用于自己训练.
而最近希望获取一些语音资源, 用于卷积神经网络的训练..
首先 wxpy 是 itchat 的升级版, 通过 wxpy bot.core 即可原封不动的调用 itchat 的指令.
可以实现的简单功能:
1. 调取所有微信好友的信息, 包括头像, 签名, 地区, 等信息.
- # -*- coding: utf-8 -*-
- """
- Created on Fri Jul 19 17:10:01 2019
- @author: wenzhe.tian
- """
- import wxpy as wp
- from collections import defaultdict
- import pandas as pd
- from tkinter import messagebox
- import os
- # 初始化机器人, 选择缓存模式 (扫码) 登录
- bot = wp.Bot(cache_path=True)
- friend = bot.core.get_friends(update=True)[0:]
- num = 0
- for f in friend:
- image = bot.core.get_head_img(userName=f["UserName"]) #用 itchat.get_head_img(userName=None)来爬取好友列表的头像
- fileImage = open(str(num) + ".jpg",'wb') #将好友头像下载到本地
- fileImage.write(image)
- fileImage.close()
- num += 1
- friend=pd.DataFrame(friend)
- friend.to_excel('friend.xlsx',sheet_name='Friend_Info')# 所有朋友相关资料存为 Excel
根据上面可以做一些头像集合, 或者微信好友的动态图表统计.
2. 消息回复
bot.friends().search('老九门里排第十')[0].send('[强]') #表示回复给 '老九门里排第十' 点赞符号 相当于 friends.search()
然而这些不能满足一些高级的需求比如:
1. 可以自动将录音, 视频, 图像, 聊天记录等按照档案记录下来.(此处修改可操作连接图灵机器人, 将提问和回答的信息记录下来. 作为自己训练的原始数据集)
其中 全局参数 global temp:
temp 是一个 list, 可以将最近的消息加入 list, 该消息信息是字典格式的所有消息包含的原始数据. 比如消息类型, 发送人, 接收人等等.
- # -*- coding: utf-8 -*-
- """
- Created on Fri Jul 19 13:10:01 2019
- @author: wenzhe.tian
- """
- import wxpy as wp
- from collections import defaultdict
- import pandas as pd
- from tkinter import messagebox
- import os
- bot = wp.Bot(cache_path=True)
- chats=bot.chats() # 所有开启了聊天窗口的对象
- groups=bot.groups() # 所有群的对象
- friends=bot.friends() # 所有好友的对象
- mps=bot.mps() # 所有公众号的对象
- @bot.register()
- def print_messages(msg):
- print(msg.create_time,msg)
- global temp
- if msg.sender.nick_name in message.keys():
- message[msg.sender.nick_name].append(msg.raw)
- else:
- message[msg.sender.nick_name]=[]
- message[msg.sender.nick_name].append(msg.raw)
- path='C:\\Users\\wenzhe.tian\\Desktop\\send_mail\\wechat_infomation\\'; # 修改为希望存储聊天, 推送, 图片, 视频, 音频等信息的地址
- if os.path.exists(path+msg.sender.nick_name)==False:
- os.makedirs(path+msg.sender.nick_name)
- if msg.type=='Text':
- f = open(path+msg.sender.nick_name+'\\message.txt','a+',encoding='utf-8')
- f.read()
- f.write('\n')
- f.write(str(msg.create_time)+msg.text)
- f.close()
- else:
- print('非文字消息, 已存储')
- if '.' in msg.file_name:
- msg.get_file(save_path=path+msg.sender.nick_name+'\\'+msg.file_name)
- else:
- msg.get_file(save_path=path+msg.sender.nick_name+'\\'+msg.file_name+'.txt')
如上图: 所有新回复的消息会自动创建 代码里 path 下的文件夹, 视频, 录音等非文字内容会直接下载, 推送等 html 格式的消息会当做文字和聊天记录一同保存下来记录到 message.txt 里
文字可以用于训练, 亦可用于词云等生成.
2. 可以管理微信公众号, 比如根据对方的输入自动从调取数据回复, 或者固定转发某些来源的推送.
- # 定位公司群
- company_group = ensure_one(bot.groups().search('公司微信群'))
- # 定位老板
- boss = ensure_one(company_group.search('BOSS'))
- # 将老板的消息转发到文件传输助手
- @bot.register(company_group)
- def forward_boss_message(msg):
- if msg.member == boss:
- msg.forward(bot.file_helper, prefix='BOSS')
3. 针对某人的自动回复, 此处可设定词汇和回复内容 (比如 HTML 格式的推送或者链接) 来实现微信公众号的一些运营.
具体用法如下:
@ bot.register() 的括号内必须为一个对象, 比如上文是一个公司的群, 是从所有群中搜索名字 '公司微信群' , 我们之前定义的
- groups=bot.groups() # 所有群的对象
- friends=bot.friends() # 所有好友的对象
- mps=bot.mps() # 所有公众号的对象
均是对象的集合, 从中筛选即可,
比如想要自动回复 老九门里排第十 这个人的所有 text 类型的消息. 即
laojiu= friends.search('老九门里排第十')[0] # 这里其实默认搜索的是 nickname
然后:
- @bot.register([laojiu, groups], TEXT) # 此处表示对 laojiu 和所有 groups 里的对象的 text 类型的消息做操作
- def auto_reply(msg):
- # 如果是群聊, 但没有被 @, 则不回复
- if isinstance(msg.chat, Group) and not msg.is_at:
- return
- else:
- # 回复消息内容和类型
- return '收到消息: {} ({})'.format(msg.text, msg.type)
暂时更新到这里, 以上.
来源: https://www.cnblogs.com/techs-wenzhe/p/11264012.html