所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

【Mind+Python】通过Server酱给企业微信发课程信息

hnyzcj hnyzcj 2021-09-13 09:45:45
3
1
简单

【设计背景】

        新学期开学了,作为信息老师的我又开始了新一轮初一上课。因为信息课每周一节,信息老师大多都会带多个班级的课,甚至还有可能跨年级。除了上述正常的教学工作以外,还需要承担其它杂活。如果忙起来肯定会有记不住的可能,再打开excel表查看,会比较麻烦。于是通过Server酱给企业微信提前发这一天的课程提示信息的方案就产生了。

 

【功能原理】

projectImage

一、程序给企业微信推送消息

        我们这里是通过第三方api(Server酱)来实现,其基本原理:授权自己的企业微信给第三方发消息,第三方收到再发消息给我们自己。

步骤1 步骤1
通过以下地址扫码登录方糖公众号:https://sct.ftqq.com/login。
步骤2 步骤2
扫码登陆系统,手机扫描下列二维码成功后,点击按钮“扫码后点此继续”即可登陆系统。
projectImage
步骤3 步骤3
获取SendKey身份标识。
projectImage
步骤4 步骤4
注册企业微信

server酱会推荐我们注册一个企业微信,并且获得各种id,目的就是为了解决server酱公众号给我们发的消息要点开才能看的问题。

projectImage

注册企业微信并提供各种id后,就可以直接给自己发消息了。https://work.weixin.qq.com/

projectImage
步骤5 步骤5
配置企业微信用户
projectImage
步骤6 步骤6
企业微信中创建应用

注册成功后,点【管理企业】进入管理界面,选择【应用管理】 → 【自建】 → 【创建应用】。应用名称填入【课表提醒】,应用logo自己找一张图,可见范围选择公司名。创建完成后进入应用详情页,可以得到应用ID( agentid ),应用Secret( secret )。

projectImage

获取应用Secret时,会将其推送到企业微信客户端,这时候微信里边是看不到的,需要在企业微信客户端里边才能看。

projectImage

点击发送按钮后,查看手机企业微信,记录Secret值。

步骤7 步骤7
填写“server酱”关键信息
projectImage

填写企业ID,应用ID,应用Secret三项基本信息。企业ID在企业微信,“我的企业”页面最下方查看。

步骤8 步骤8
发送信息测试
projectImage

手机企业微信接收到消息

projectImage
步骤9 步骤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)
	                    				
projectImage

二、定时发送信息

        我们要实现的是定时提醒的功能,这里使用的是apscheduler库。apscheduler是一个基于Quartz的python定时任务框架,相关的 API接口调用方便,目前其提供了基于日期、固定时间间隔以及corntab类型的任务。同时它提供了多种不同的调用器,方便开发者根据自己的需求进行使用。

第一步:安装apscheduler库。在Mind+软件中点击库管理,切换到PIP模式,输入命令:“pip install apscheduler”,点击运行按钮安装apscheduler库。

步骤10 步骤10
安装apscheduler库。
projectImage

在Mind+软件中点击库管理,切换到PIP模式,输入命令:“pip install apscheduler”,点击运行按钮安装apscheduler库。

步骤11 步骤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实现了定时器发送的,接下来,就是常规的课程表对应的业务处理了。

projectImage
步骤12 步骤12
实际应用,根据实际课表实现每天9点定时发送提醒。
projectImage
代码 代码
	                    					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()
	                    				
projectImage
Makelog作者原创文章,未经授权禁止转载。
3
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]