之前瞭解到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裡
文字可以用於訓練,亦可用於詞雲等生成。
例:message的文件提取後
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)
暫時更新到這裡,以上。