Py学习  »  Python

python统计微信群接龙并实时反馈

懒人找资源 • 5 年前 • 1266 次点击  


well,想不到小懒人要来开技术贴了。
就算阅读量少还是分享一下,希望可以帮到需要的朋友。
考虑到很多粉丝是小白,代码会尽量简洁,注释又详细,贴出来的每一个代码块都能独立运行。

需求

有朋友反馈他们公司每天都要在微信群接龙反馈类似健康申报和到岗情况,而他负责统计未接龙的成员并艾特催促他们。要命的是群成员多,接龙又不按顺序,一早上盯下来精疲力尽。
群接龙作为一个微信新出的功能,用来统计报名是挺好用的,用来统计信息说实话还不如直接找个在线的小程序或者表格呢,还避免刷屏。anyway,既然有需求就肯定有对应方案,python的微信自动化了解一下。

解决思路

python登陆微信并读取群消息,判断统计人员姓名是否在群聊信息中,否则给出反馈。
首先确保你的微信号可以登陆网页版微信,浏览器访问https://wx.qq.com/,手机扫码后可以登陆就ok。新注册的微信无法登陆网页版,则无法进行今天的编程测试。
python的微信库有两个,大名鼎鼎的itchat和wxpy。我们选择后者,wxpy是在itchat基础上的二次开发和功能扩展,所以更简洁,操作更方便。
官方文档:
https://wxpy.readthedocs.io/zh/latest/

基础教程

安装wxpy库:
pip install wxpy
登陆微信只要三行代码
# -*- coding:utf-8 -*-from wxpy import * #导入库bot = Bot(cache_path=True) # True代表本地缓存,不用每次重新扫码bot.join() #开启线程
读取群消息
# -*- coding:utf-8 -*-from wxpy import *bot = Bot(cache_path=True)group_name ='编程练习测试' #群名称,可自定义my_group = bot.groups(update=True).search(group_name)[0]@bot.register(my_group, msg_types=TEXT) def group(msg):    print(msg.text) #输出群消息bot.join()
运行上述代码,群名为“编程练习测试”的群消息将被打印出来。
由于接龙是一条消息含所有人的名字的,所以先要确定有那些需要上报。
方案一每次获取群内所有成员,再逐一对比。
方案二,将需要参与接龙的群成员放于一个列表中。
小懒人采用第二种比较灵活的方法。
快速获取群成员可以采用如下方法:
# -*- coding:utf-8 -*-from wxpy import *bot = Bot(cache_path=True)group_name ='编程练习测试' #群名称,更改为你的群my_group = bot.groups(update=True).search(group_name)[0]for member in my_group:    print(member) #输出所有成员@bot.register(my_group, msg_types=TEXT)def group(msg):    print(msg.text) #输出群消息bot.join()
以体验群为例,马上输出四百多位群友,但是其格式是
咱们用下面的方法处理一下输出来作为列表。
将上述6-7行改为:
all = []for member in my_group:    member = str(member)    member = member.replace("    member = member.replace(">","")    all.append(member)print(all)
输出
我们把这些复制到代码里作为成员列表,然后开始对比群消息里的成员。
完整代码如下,每一行小懒人都详细注释了。
# -*- coding:utf-8 -*-from wxpy import *bot = Bot(cache_path=True)group_name ='编程练习测试' #群名称my_group = bot.groups(update=True).search(group_name)[0]key_word = "在岗情况和疫情报告" #接龙关键词,群消息必须含连续的这些关键词all_people =["张三","李四","王五","陈六","赵七","小懒人","师弟"]@bot.register(my_group, msg_types=TEXT)def group(msg):    # print(msg.text) #输出群消息    if key_word in msg.text : #判断消息是否接龙,即表头是否含关键词        print('开始进入接龙')        content = msg.text        done_count = 0 #初始接龙人数为0        not_yet = "" #还没接龙的人员,初始为空        for people in all_people: #从所有人员列表中逐一取出            if people in content: #如果这个名字在这条消息里,则下一步                done_count +=1 #接龙人数+1            else:                at_them = "@" +people +","  #把这个没接龙的人前面加个@                not_yet += at_them  #如果不在群消息里面,则放入未接龙成员合集        print("已登记人数:%s人" % done_count)  # 直接控制台打印登记人数        if done_count == len(all_people) :  #全部人数            msg.sender.send("今日接龙已全员完成,共%s人"%done_count) #往群里面发送已完成信息        elif 3 < done_count < len(all_people): # 大于3个人之后开始反馈,可以自己设定,没必要每收到一条信息就反馈一次            msg.sender.send("已接龙人数:%s人。未上报群成员为:%s请及时接龙并到到体验群领资源"%(done_count,not_yet))            # 往群里发送为完成的人员名单bot.join() #程序开始
下面这行代码是向群内发送消息的。print是输出到控制台。
msg.sender.send("今日接龙已全员完成,共%s人"%done_count)来测试一下,在python的控制台可以收到print的消息
至于群内效果如何,亲测完美解决。
成员接龙不需要按顺序,可以设置开始反馈的阈值,比如到最后10个再开始反馈是哪些人未接龙。另外其接龙用的名称需要和素材库里的一致,接龙默认就是其群昵称的。
上图的代码可以直接运行了,代码文件小懒人也上传到懒人盘03栏了。懒得复制的可以直接到懒人盘下载。
不知道小伙伴们用接龙方式打卡的多不多,必要时把上述脚本封装成可执行软件,方便不会python的小伙伴。
至于想学和正在学的粉丝们可以把它作为一个小小练手项目,总共不超过30行,小懒人也在每一行代码后面都详细注释了。
真是写代码5分钟,注释15分钟,写文章50分钟啊!

如果运行脚本有问题

体验群的小伙伴可以明天晚上北京时间7-9点私信小懒人答疑,人多的话建个临时答疑群,必要时远程帮忙调试。
公众号粉丝们运行上述脚本有啥问题可以直接留言,小懒人看到就会回复解答的。
希望今天的发文对你有帮助,明天再来分享软件资源,小懒人要去看会儿今天给群友更新的刘润商业通识30讲了。最后贴上其官方允许转载的一张思维导图,非体验群成员请到得到官方购买课程。
近期文章
磁力搜索兼下载软件,再聊体验群新站点
从巫师财经被指抄袭,到体验群新增课程
小懒人珍藏网站,免翻批量下instagram
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56115