美文网首页程序员
用python wxpy管理微信公众号,并利用微信获取自己的开源

用python wxpy管理微信公众号,并利用微信获取自己的开源

作者: b997abea0e9d | 来源:发表于2019-08-01 14:21 被阅读6次

     之前了解到itchat 乃至于 wxpy时 是利用tuling聊天机器人的接口。调用接口并保存双方的问答结果可以作为自己的 问答词库 的一个 数据库累计。 这些数据可以用于自己训练。

    而最近希望获取一些语音资源,用于卷积神经网络的训练。。

    首先wxpy是itchat的升级版,通过wxpy bot.core即可原封不动的调用itchat的指令。

    可以实现的简单功能:

    Python资源共享群:484031800

    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)

    暂时更新到这里,以上。

    相关文章

      网友评论

        本文标题:用python wxpy管理微信公众号,并利用微信获取自己的开源

        本文链接:https://www.haomeiwen.com/subject/zrktdctx.html