回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

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

头像 hnyzcj 2021.09.13 762 2

【设计背景】

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

 

【功能原理】

project-image

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

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

步骤1 通过以下地址扫码登录方糖公众号:https://sct.ftqq.com/login。

步骤2 扫码登陆系统,手机扫描下列二维码成功后,点击按钮“扫码后点此继续”即可登陆系统。

project-image

步骤3 获取SendKey身份标识。

project-image

步骤4 注册企业微信

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

project-image

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

project-image

步骤5 配置企业微信用户

project-image

步骤6 企业微信中创建应用

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

project-image

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

project-image

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

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

project-image

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

步骤8 发送信息测试

project-image

手机企业微信接收到消息

project-image

步骤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)
project-image

二、定时发送信息

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

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

步骤10 安装apscheduler库。

project-image

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

project-image

步骤12 实际应用,根据实际课表实现每天9点定时发送提醒。

project-image
代码
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()
project-image

评论

user-avatar
  • 啊哦哈哈哈

    啊哦哈哈哈2021.10.24

    哈哈

    0
    • 王尧坤

      王尧坤2021.10.06

      学习了,非常好的想法

      0