zoukankan      html  css  js  c++  java
  • 用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('
    ')
            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)

    暂时更新到这里,以上。

     

     

  • 相关阅读:
    Springboot使用PlatformTransactionManager接口的事务处理
    js 正则替换html标签
    【转】mysql查询时,查询结果按where in数组排序
    js输出字幕数字a-zA-Z0-9
    tcpdump使用教程
    rsync安装使用教程
    vim配置修改教程
    XD刷机报错bad CRC
    使用docker搭建seafile服务器
    案例:使用sqlplus登录报ORA-12547错误
  • 原文地址:https://www.cnblogs.com/techs-wenzhe/p/11264012.html
Copyright © 2011-2022 走看看