庚子年开局不利一场新冠暴露出很多问题,该管的时候不怎么管,不该管的却管理过度,笔者有一个小娃今年五岁,就读于幼儿园,随着疫情的发展,每个周期在微信群里的报告内容也在升级。从一开始只要填写一张有没有湖北接触史的表格发展到需要每天一大早整点打卡汇报,哪天忘记老师就会在群里@或打电话,为了不给老师添麻烦以及给自己减少工作量我开始想各种办法。首先从朋友那要到一款微信助手,运行了一下之后电脑直接死机,后来陆陆续续在各大网站徘徊,测试了一堆微商工具比如WeTools 、聊天狗之类的,其中WeTools 免费版差一点点就能满足我的需求,我研究了WeTools的收费版有可能能满足我的需求,但是价格是2000多,摸了一下钱包犯不着为了幼儿园打个卡掏2000多,2000多可以给娃买很多玩具了。正当我要放弃的时候,无意当中翻到一篇关于用Python运行微信机器人的文章,打开研究了一下,对于我这个从学校毕业出来之后就没写过程序的人来说,有点像看天书,硬着头皮看下去之后发现Python语句还是比较简单的,做IT的人天生都喜欢DIY,于是利用两个晚上在油管上看学习视频,今天在请教了几个朋友之后终于写出能够实现我需求的代码,特此记录一下。由于本人水平有限部分代码是网上搜来的拼凑之下可以满足需求了。
首先声明:本人及家人都严格遵守政府的规定,除了买菜拿快递都居家不出去,且近期没有旅行史。同时我家娃只要不去幼儿园是绝对不会生病的,在这里鄙视下那些娃生病还没好利索就送去幼儿园给老师和其他家长添麻烦的粑粑麻麻们。
再说需求:幼儿园要求每天早上8点之前报告孩子的情况,一切正常的话在群里发“在上海,同昨日,家长和幼儿身体无恙,一切正常” 。
代码设计过程:
- 首先需要登录微信(Python的安装教程网上一大把就不在这里展开了)需要在Python里安装itchat模块然后用itchat.auto_login(hotReload=True) 这个命令登录微信,执行过后会弹出二维码用手机扫完就登录了。
-
需要找出群ID,看了大量文章之后发现微信的群ID和个人ID每次登录都会变化,所以需要用到如下这两个命令来查询。
itchat.get_chatrooms(update=True)
chatrooms = itchat.search_chatrooms(name=’群中文名’)
查询完之后会得到一串很长的字符串如下图所示,经过研究之后发现’UserName’ 和 ‘NickName’之间的那串就是群临时ID(每次登录会变)。
-
这个时候就要用到 下面这条语句来提取 ‘@@eb1a7fd22c02ba8173a33b06879d07faa7ec3bcfcbd4516ec40067746ebda48d’ 这一段值
if len(chatrooms) <=0:
print(u’没有找到群聊:’ + chatroomName)
else:
chatroom = chatrooms[0][“UserName”]
print(chatroom)
- 有了这段值之后我们就可以用下面这个命令来发消息了itchat.send(‘在上海,同昨日,家长和幼儿身体无恙,一切正常。’, toUserName=chatroom)
-
现阶段需要循环每天8点发消息用到如下代码
# 获取现在时间
now_time = datetime.datetime.now()
# 获取明天时间
next_time = now_time + datetime.timedelta(days=+1) 这里补充下如果是当天的这里改成+0
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# 获取明天8点时间
next_time = datetime.datetime.strptime(str(next_year)+”-“+str(next_month)+”-“+str(next_day)+” 08:00:00″, “%Y-%m-%d %H:%M:%S”)
# # 获取昨天时间
# last_time = now_time + datetime.timedelta(days=-1)
# 获取距离明天8点时间,单位为秒
timer_start_time = (next_time – now_time).total_seconds()
print(timer_start_time)
# 54186.75975
#定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(timer_start_time, send_msg)
timer.start()
-
到了这部之后试运行了一下是可以发送消息的,但是运行了一段时间之后发现和腾讯的服务器之间长时间没有通讯会被强制断开,这个时候可以在代码最后加一个发给文件助手的代码可以设置每15分钟或
20分钟运行一次
def send_msg():
itchat.send(’15分钟一次’, toUserName=filehelper)
def loop_sender():
while True:
send_msg()
time.sleep(900)
loop_sender()
最后运行效果如下图 37448.700272是到第二天8点的倒计时,下面的那串是我之前测试设置的每5分钟发送一次和服务器保持联系