根据课表自动打开网课上课平台——Python实现

前言

自疫情爆发以来啊,对大学牲来讲,上网课已基本成为司空见惯的事情了,在看的各位谁还没上过个网课呢。抛开事实不谈,上网课的效率还是比较高的(手动狗头)。

那有些游手好闲,啊不对,是热爱学习的小可爱(yue),自然要考虑怎么进一步提升上网课的效率。

好!说干就干,马上分析一波:

网课,顾名思义是在网上上课。上课,首先得知道该上什么课,对吧。好,掏出手机打开学校教务系统(或者手机相册),“今天是……星期三,第一节课是《母猪的产前婚检》,嗯,知道了。”

那岂不是很麻烦。请诸位想想,我上网课,还得先打开手机看课表,这不是消耗体力对手机做功吗。对于吾等热爱学习的好宝贝,自然要尽可能节省体力。没错,我甚至不愿意打开手机。

那第一个需求就有了:导入课表,根据当前时间,判断要上的课程。

解决了上什么课的问题,接下来考虑怎么上课。网课那一定要依托平台喽。钉钉、腾讯会议、腾讯课堂、学习通乃至QQ群,大家耳熟能详。我们只需要在电脑上双击运行平台,输入会议号关闭麦克风和摄像头,或者登录账号找到要上的课程,点击进入。

那么自然而然,第二个需求:根据当前要上的课程,获得这个课程在哪个平台上,然后帮我自动打开平台。

接下来课程打开,我们就可以进入(可能)愉快的听课阶段了。两个需求,现在开始实现。

实现

#导入需要的库
import time        #标准库,时间模块,用来获取系统时间
import os          #标准库,与操作系统进行交互,执行shell命令
import sys         #标准库,与Python解释器进行交互
import webbrowser  #标准库,调用系统浏览器打开网页
import winreg      #标准库,操作注册表,获取软件安装信息
#定义函数,获取当前时间,根据条件返回不同值代表第几节课
def currentTime():
    CT = time.strftime("%H:%M:%S")       #核心函数:把一个代表时间的元组或者struct_time转化为格式化的时间字符串
    if "06:00:00" < CT <= "09:50:00":    #当前时间在第一节课的时间范围内
        return 0
    elif "09:50:00" < CT <= "12:00:00":  #当前时间在第二节课的时间范围内
        return 1
    elif "12:00:00" < CT <= "16:20:00":  #当前时间在第三节课的时间范围内
        return 2
    elif "16:20:00" < CT <= "18:30:00":  #当前时间在第四节课的时间范围内
        return 3
    elif "18:20:00" < CT <= "21:20:00":  #当前时间在第五节课的时间范围内
        return 4
#定义函数,检查网络连接,返回布尔值
def CheakNetwork():
    if os.system("ping www.baidu.com") == 0:    #ping百度(百度:你礼貌吗)
        os.system("cls")                        #os.system()运行shell命令,返回0/1,0代表成功执行
        return True,
    else:
        return False
定义函数,启动腾讯会议
def RunWeMeet():
    reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\WeMeet",reserved=0,access=winreg.KEY_READ)
    pathWeMeet = winreg.QueryValueEx(reg,"DisplayIcon")[0]  #这个注册表键值存放了腾讯会议的启动路径
    winreg.CloseKey(reg)
    strProcess = "".join(list(os.popen("tasklist")))    #用os模块运行tasklist,获取所有进程信息
    strProcessCount = strProcess.count("wemeetapp.exe") #返回程序正在运行的进程数量
    if strProcessCount > 1:                             #腾讯会议正在运行:关闭程序并重启
        os.system("taskkill /f /t /im wemeetapp.exe")   #关闭进程
        os.system(pathWeMeet)
    else:                                               #腾讯会议未运行:正常启动
        os.system(pathWeMeet)
定义函数,启动钉钉,思路和启动腾讯会议的一样
def RunDingDing():
    reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\nw.exe")
    pathWeMeet = winreg.QueryValueEx(reg,"")[0]
    winreg.CloseKey(reg)
    strProcess = "".join(list(os.popen("tasklist")))
    strProcessCount = strProcess.count("DingTalk.exe")
    if strProcessCount > 1:
        os.system("taskkill /f /t /im DingTalk.exe")
        os.system(pathWeMeet)
    else:
        os.system(pathWeMeet)
#定义函数,启动腾讯课堂,腾讯课堂网页端就可以用
def Runke_qq():
    webbrowser.open("https://ke.qq.com",new=1,autoraise=1)    #webbrowser模块,打开浏览器,进入腾讯课堂主页
#定义函数,启动学习通
def Runchaoxing():
    webbrowser.open("http://i.chaoxing.com",new=1,autoraise=1)
#定义函数,从文件获取当日课程信息。参数i(0~4)决定当前时间段应该上哪一节课(currentTime()的返回值),返回[课程名,上课平台]格式的列表
def ReadSchedule(i):
    Weekday = time.strftime("%A")           #获取系统时间,判断当日是星期几
    f = open("schedule.txt","r",encoding="utf-8")
    ReadList = f.readlines()[8:13]          #读取周一至周五的课表
    f.close()
    MondaySchedule = "".join(ReadList[0])   #周一课表
    TuesdaySchedule = "".join(ReadList[1])  #周二课表
    WednesdaySchedule = "".join(ReadList[2])#周三课表
    ThursdaySchedule = "".join(ReadList[3]) #周四课表
    FridaySchedule = "".join(ReadList[4])   #周五课表
    if Weekday == "Monday":
        Weekday = MondaySchedule
    elif Weekday == "Tuesday":
        Weekday = TuesdaySchedule
    elif Weekday == "Wednesday":
        Weekday = WednesdaySchedule
    elif Weekday == "Thursday":
        Weekday = ThursdaySchedule
    elif Weekday == "Friday":
        Weekday = FridaySchedule
    oneClassList = Weekday[4:].split(";",4)            #分离单个课程和上课的平台,存放在列表
    if oneClassList[i].find("-") != -1:
        ClassName = oneClassList[i].split("-")[0]       #课程名
        ClassSoftware = oneClassList[i].split("-")[1]   #上课平台
    else:
        ClassName = "无课"
        ClassSoftware = "None"
    return ClassName,ClassSoftware



"""
关于从文件获取课程信息:我想的是自定义一个txt文档(schedule.txt),
文档里面按照格式手动导入课表和对应的上课平台信息,
所以这个程序想运行,还得在程序所在目录下自定义一个schedule.txt文档,里面存放课程信息
这段代码的“谜之”操作,需要配合自定义的schedule.txt文件格式,文件内容如下:
"""

#自定义课表格式要求:星期N:《课程名称1》-上课平台;《课程名称2》-上课平台;……;《课程名称5》-上课平台;(N的范围:一到五)
#整个课表文档没有任何一个空格,自定义课表的时候不要!不要!不要!敲空格。你看到的觉得有空格,是因为这个课表的标点是中文输入状态下写的,全角符号占2字符
#各课程之间用分号(;)隔开(注意是中文输入下的分号,占2字符)
#上课平台目前只支持钉钉、腾讯会议、腾讯课堂和学习通。如果上课平台是腾讯会议,格式为:腾讯会议(会议号)
#同一天的课程写在同一行,按照上课时间,从早到晚依次排列,顺序不能乱
#当天最多5堂课,没有课的部分填:“无课”。5个分号,一个都不能缺。比如:《课程1》-钉钉;课程《2》-钉钉;无课;《课程4》-钉钉;无课;
#自定义下方课表时,以上内容仔细阅读!仔细阅读!仔细阅读!严格遵循课表格式,不要擅自更改及删除其他任何内容

星期一:《高分子技术》-腾讯会议(12345678910);《金属与热处理》-腾讯会议(10987654321,密码:560237);《有色金属》-腾讯会议(10203040506);无课;《炼钢》-腾讯会议(60708090100);
星期二:《生物化学》-腾讯会议(10102020303);《物理化学》-钉钉;无课;无课;无课;
星期三:《母猪的产前婚检》-钉钉;《水稻繁育学》-学习通;无课;无课;《修狗绝育研究》-腾讯会议(33445566778);
星期四:《数据结构》-腾讯会议(12312312312);《汇编语言》-钉钉;《软件工程》-腾讯会议(74185296371);《大学英语》-钉钉;无课;
星期五:《修仙概论》-腾讯会议(010203040506);《练气期修炼方法》-学习通;《筑基入门》-腾讯会议(04050607080);《元神孕育精要》-腾讯课堂;无课;
#程序入口
if __name__ == "__main__":
    startTime = time.strftime("%H:%M:%S")
    if startTime >= "06:00:00" and startTime <= "21:20:20":     #如果系统时间大于早上六点,不晚于晚上九点二十,启动程序
        if CheakNetwork() == True:
            ClassList = ReadSchedule(currentTime())             #列表返回当前时间段(currentTime()控制)要上的课程和上课平台,[课程名,上课平台]
            if ("腾讯会议" in ClassList[1]) == True:
                print("当前课程为:"+ClassList[0])
                print("启动"+ClassList[1])
                RunWeMeet()
                input()
            elif ("钉钉" in ClassList[1]) == True:
                print("当前课程为:"+ClassList[0])
                print("启动"+ClassList[1])
                RunDingDing()
                input()
            elif ("腾讯课堂" in ClassList[1]) == True:
                print("当前课程为:"+ClassList[0])
                print("启动"+ClassList[1])
                Runke_qq()
                input()
            elif ("学习通" in ClassList[1]) == True:
                print("当前课程为:"+ClassList[0])
                print("启动"+ClassList[1])
                Runchaoxing()
                input()
            elif ("None" in ClassList[1]) == True:
                  input("你当前无课\n")
        else:
            input("你没联网啊铁子\n")
            sys.exit()
    else:
        input("这个点你上什么课……\n")
        sys.exit()

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪就该搓雪球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值