【设计背景】
新学期开学了,作为信息老师的我又开始了新一轮初一上课。因为信息课每周一节,信息老师大多都会带多个班级的课,甚至还有可能跨年级。除了上述正常的教学工作以外,还需要承担其它杂活。如果忙起来肯定会有记不住的可能,再打开excel表查看,会比较麻烦。于是通过Server酱给企业微信提前发这一天的课程提示信息的方案就产生了。
【功能原理】
一、程序给企业微信推送消息
我们这里是通过第三方api(Server酱)来实现,其基本原理:授权自己的企业微信给第三方发消息,第三方收到再发消息给我们自己。
步骤1 通过以下地址扫码登录方糖公众号:https://sct.ftqq.com/login。
步骤2 扫码登陆系统,手机扫描下列二维码成功后,点击按钮“扫码后点此继续”即可登陆系统。
步骤3 获取SendKey身份标识。
步骤4 注册企业微信
server酱会推荐我们注册一个企业微信,并且获得各种id,目的就是为了解决server酱公众号给我们发的消息要点开才能看的问题。
注册企业微信并提供各种id后,就可以直接给自己发消息了。https://work.weixin.qq.com/
步骤5 配置企业微信用户
步骤6 企业微信中创建应用
注册成功后,点【管理企业】进入管理界面,选择【应用管理】 → 【自建】 → 【创建应用】。应用名称填入【课表提醒】,应用logo自己找一张图,可见范围选择公司名。创建完成后进入应用详情页,可以得到应用ID( agentid ),应用Secret( secret )。
获取应用Secret时,会将其推送到企业微信客户端,这时候微信里边是看不到的,需要在企业微信客户端里边才能看。
点击发送按钮后,查看手机企业微信,记录Secret值。
步骤7 填写“server酱”关键信息
填写企业ID,应用ID,应用Secret三项基本信息。企业ID在企业微信,“我的企业”页面最下方查看。
步骤8 发送信息测试
手机企业微信接收到消息
步骤9 编写程序,运行测试。打开Mind+编程软件切换到python模式,输入以下代码。
# encoding:utf-8
import requests
sendkey="SCT74101TDESZUCZUHHF8pPTOjitq64X1"
api = "https://sctapi.ftqq.com/"+sendkey+".send"
title = "今天有课"
content = """
今天有课,别忘记啦:
第四节 初一18班
今天一天,加油!
"""
data = {
"text":title,
"desp":content
}
req = requests.post(api,data = data)
二、定时发送信息
我们要实现的是定时提醒的功能,这里使用的是apscheduler库。apscheduler是一个基于Quartz的python定时任务框架,相关的 API接口调用方便,目前其提供了基于日期、固定时间间隔以及corntab类型的任务。同时它提供了多种不同的调用器,方便开发者根据自己的需求进行使用。
第一步:安装apscheduler库。在Mind+软件中点击库管理,切换到PIP模式,输入命令:“pip install apscheduler”,点击运行按钮安装apscheduler库。
步骤10 安装apscheduler库。
在Mind+软件中点击库管理,切换到PIP模式,输入命令:“pip install apscheduler”,点击运行按钮安装apscheduler库。
步骤11 编写程序定时发送。
from apscheduler.schedulers.blocking import BlockingScheduler
import requests
def sendMessage(title,content):
sendkey="SCT74101TDESZUCZUHHF8pPTOjitq64X1"
api = "https://sctapi.ftqq.com/"+sendkey+".send"
data = {
"text":title,
"desp":content
}
req = requests.post(api,data = data)
scheduler=BlockingScheduler()#后台执行模式
scheduler.add_job(sendMessage,'cron',#添加任务执行函数,选择任务类型
['上课提醒','第四节,初一18班'],#参数列表
day_of_week='0-6',#工作日
hour='22',#时
minute='14',#分
second='00')#秒
scheduler.start()
测试运行,apscheduler实现了定时器发送的,接下来,就是常规的课程表对应的业务处理了。
步骤12 实际应用,根据实际课表实现每天9点定时发送提醒。
from apscheduler.schedulers.blocking import BlockingScheduler
import requests
import datetime
dic1={4:15}
dic2={4:17,7:19}
dic3={4:20,5:14}
dic4={7:16}
dic5={5:18,6:13}
dic7={7:13}
def dic2txt(dic):
tip=''
for k,v in dic.items():
tip+="第%d节 初一%d班\n" % (k,v)
return tip
def sendMessage():
title="上课提醒"
content="今日无课"
wd = datetime.datetime.now().weekday()#获得今天星期几
if wd==0:#周一
content = dic2txt(dic1)
if wd==1:#周二
content = dic2txt(dic2)
if wd==2:#周三
content = dic2txt(dic3)
if wd==3:#周四
content = dic2txt(dic4)
if wd==4:#周五
content = dic2txt(dic5)
if wd==6:#周日
content = dic2txt(dic7)
sendkey="SCT74101TDESZUCZUHHF8pPTOjitq64X1"
api = "https://sctapi.ftqq.com/"+sendkey+".send"
data = {
"text":title,
"desp":content
}
req = requests.post(api,data = data)
scheduler=BlockingScheduler()
scheduler.add_job(sendMessage,'cron',
day_of_week='0-6',
hour='05',
minute='26',
second='0')
scheduler.start()
啊哦哈哈哈2021.10.24
哈哈
王尧坤2021.10.06
学习了,非常好的想法