用python wxpy管理微信公眾號,並利用微信獲取自己的開源數據。


之前了解到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
global msg_temp,path

bot = wp.Bot(cache_path=True)
chats=bot.chats() # 所有開啟了聊天窗口的對象
groups=bot.groups() # 所有群的對象
friends=bot.friends() # 所有好友的對象
mps=bot.mps() # 所有公眾號的對象
msg_temp={}
path='D:\\wechat_info\\';
try:
    os.mkdir(path)
except:
    pass

@bot.register(except_self=False)
def write_down_messages(msg):
    global msg_temp,path
    print(msg.create_time,msg)
    try:
        save_name=msg.chat.remark_name
        if save_name=='':
            save_name=msg.chat.nick_name
    except:
        save_name=msg.chat.nick_name
    if msg.sender==bot.self:
        sender_name=bot.self.nick_name
    else:
        sender_name=save_name

    print(sender_name)

    if save_name in msg_temp.keys():
        msg_temp[save_name].append(dict(msg.raw))
    else:
        msg_temp[save_name]=[]
        msg_temp[save_name].append(dict(msg.raw))

    try:
        os.mkdir(path+save_name)
    except:
        pass

    if msg.type=='Text':
        # 保存消息
        f = open(path+save_name+'\\message.txt','a+',encoding='utf-8')
        f.read()
        f.write('\n')
        if msg.member==None:
            f.write(str(msg.create_time)+' '+sender_name+': '+msg.text)
        else:
            f.write(str(msg.create_time)+' '+msg.member.nick_name+': '+msg.text)
        f.close()
        print('文字消息,已存儲')

    else:
        if '.' in msg.file_name:
            msg.get_file(save_path=path+save_name+'\\'+msg.file_name)
        else:
            msg.get_file(save_path=path+save_name+'\\'+msg.file_name+'.txt')
        print('非文字消息,已存儲')


    if save_name =='' and sender_name=='': #如果是跟鑫的聊天,切發消息的人也是他的回復
        msg.reply('你在搞我。')

 

 

                                              

 

 如上圖: 所有新回復的消息會自動創建 代碼里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)

暫時更新到這里,以上。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM