适配沈师2022新生课程表

鄙人新生,开发能力有限,js只会一点点

本代码一定存在很多缺陷,或者有地方处理的很麻烦

欢迎大神赐教

小白向,不喜勿喷,本项目纯属练习

本代码部分参考网络

小爱课程表开发文档:Document


provider.js

首先执行scheduleHtmlProvider抓取教务系统源代码

function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {return dom.querySelector('#iframeautoheight').contentWindow.document.body.innerHTML;
}

parser.js

执行scheduleHtmlParser函数,传参为scheduleHtmlProvider抓取的教务系统源代码

function scheduleHtmlParser(html) {//定义最终result数组var result=[];var $ = cheerio.load(html, { decodeEntities: false });//遍历每一横排tr$("#Table1 tr").each(function (i) {//i>1意味着索引2即从第三行开始if (i > 1) {//遍历每横排的每个格子,七天加一个表头共8列,故j输出(0,7),正好对应星期//大学两节课连上,目前只能截取1,3,5,7,9课,稍后合并1,2...$(this).children('td').each(function (j) {//因为存在合并单元格,所以上午,下午,晚上的第一节课(1,5,9)对应这一横行的2索引,而3,7节对应1索引,所以下面要添加一个判断if ((i - 1) == 1 || (i - 1) == 5 || (i - 1) == 9) {if ((j - 1) > 0) {console.log("第"+(i-1)+"节课,星期"+(j-1)+"课程名称:"+$(this).html());//执行课程解析函数var classObj = getClass($(this).html(), (j-1), (i - 1));//拼接到result里面,判断是否为空,如果为空,getClass不执行,所以不添加classObj到里面resultif(typeof(classObj)!="undefined"){console.log(classObj.length);//同一课程不同教室会大于1if (classObj.length>1){//双课程console.log("这是双课程");//分别加到result里面result.push(classObj[0]);result.push(classObj[1]);}else{//普通课程result.push(classObj);console.log("这是普通课程");}}}}else if ((i - 1) == 3 || (i - 1) == 7) {if (j > 0) {console.log("第"+(i-1)+"节课,星期"+(j)+"课程名称:"+$(this).html());//执行课程解析函数var classObj = getClass($(this).html(), j, (i - 1));//拼接到result里面,判断是否为空,如果为空,getClass不执行,所以不添加classObj到result里面if(typeof(classObj)!="undefined"){console.log(classObj.length);//同一课程不同教室会返回2if (classObj.length>1){//双课程console.log("这是双课程");result.push(classObj[0]);result.push(classObj[1]);}else{//普通课程result.push(classObj);console.log("这是普通课程");}}}}})}})//返回最终resultreturn result;
}//定义课程解析函数
function getClass(classHtml, day, section) {var classs = classHtml.split('<br>');//console.log(classs);//这里判断是否一个课程根据单双周不一个教室(双课程),上面是单,下面是双if (classs.length < 6&&classs.length>1) { //防止空课,空nbsp长度为1console.log("这是单课程");//这里严格遵守返回格式var classObj = {};classObj.name = classs[0];classObj.position = classs[4];classObj.teacher = classs[3];classObj.weeks = getWeeks(classs[2]);classObj.day = day;classObj.sections = [];//一节课时间是两节,这里进行合并classObj.sections.push(section);classObj.sections.push(section+1);return classObj;             }else if (classs.length > 6){console.log("这是双课程");//console.log(classs);//默认上面为单周var classObj = {};classObj.name = classs[0];classObj.position = classs[4];classObj.teacher = classs[3];classObj.weeks = getWeeks(classs[2]);classObj.day = day;classObj.sections = [];//一节课时间是两节,这里进行合并classObj.sections.push(section);classObj.sections.push(section+1);// //双周向里面添加数据var class2 = {};class2.name = classs[6];class2.position = classs[10];class2.teacher = classs[9];class2.weeks = getWeeks(classs[8]);class2.day = day;class2.sections = [];//一节课时间是两节,这里进行合并class2.sections.push(section);class2.sections.push(section+1);//把双周class2字典加入classObj里面var classObj1=[classObj,class2];return classObj1;        }
}//单双周
function getWeeks(weeksHtml) {var weeks=[];//定义weeks数组var weeksStr = weeksHtml;//开始分割var data1=weeksHtml.split("{");var data2=data1[1].split("}");//data2[0]格式为  第5-18周|单周或第5-18周,下面需要判断是否单双周//不需要正则去掉“第”和“周”,用"-"分割data3=data2[0].split("第");data4=data3[1].split("周");data5=data4[0].split("-");week_start=parseInt(data5[0]);//转化整型以遍历week_end=parseInt(data5[1])+1;if(data2[0].indexOf('|') == -1){//正常周console.log("这是正常周");//开始遍历for(var i=0;i<week_end;i++){if(i>=week_start){weeks.push(i);}}}else{if (data2[0].indexOf('单') != -1){console.log("这是单周");for(var i=1;i<week_end;i=i+2){if(i>=week_start){weeks.push(i);}}}else{console.log("这是双周");for(var i=0;i<week_end;i=i+2){if(i>=week_start){weeks.push(i);}}  }}return weeks;
}

timer.js

/*** 时间配置函数,此为入口函数,不要改动函数名*/async function scheduleTimer({providerRes,parserRes
} = {}) {return {totalWeek: 18, // 总周数:[1, 30]之间的整数startSemester: '1661702400000', // 开学时间:时间戳,13位长度字符串,推荐用代码生成startWithSunday: false, // 是否是周日为起始日,该选项为true时,会开启显示周末选项showWeekend: true, // 是否显示周末forenoon: 4, // 上午课程节数:[1, 10]之间的整数afternoon: 4, // 下午课程节数:[0, 10]之间的整数night: 2, // 晚间课程节数:[0, 10]之间的整数sections: [{ section: 1, startTime: "08:20", endTime: "09:05" },{ section: 2, startTime: "09:10", endTime: "9:55" },{ section: 3, startTime: "10:10", endTime: "10:55" },{ section: 4, startTime: "11:00", endTime: "11:45" },{ section: 5, startTime: "13:15", endTime: "14:00" },{ section: 6, startTime: "14:05", endTime: "14:50" },{ section: 7, startTime: "15:00", endTime: "15:45" },{ section: 8, startTime: "15:50", endTime: "16:35" },{ section: 9, startTime: "17:30", endTime: "18:15" },{ section: 10, startTime: "18:25", endTime: "19:10" }], // 课程时间表,注意:总长度要和上边配置的节数加和对齐}}

小爱课程表适配-正方教务相关推荐

  1. 小爱同学app安卓版_小爱课程表3.0全新升级 课表倒入更简单所有手机能用

    11月2日,小爱同学官方宣布,小爱课程表3.0全新升级,学生党的必备神器.小米手机上可以对小爱同学说"打开课程表"直接使用小爱课程表,非小米手机可以到应用商店搜索"小爱课 ...

  2. 新版小爱课程表正方教务系统课表适配

    新版小爱课程表正方教务系统课表适配 前言 之前写过一篇小爱课程表的教务系统适配,但是是比较老的版本开发者工具适配了,最近看到小爱课程表开发者工具更新了,就想着写一篇新的博客,顺便优化一下之前的代码,还 ...

  3. 小爱同学课程表——河南理工大学教务系统适配

    <小爱同学课程表> -----河南理工大学教务系统(树维教务系统)适配 小爱同学课程表的教务系统导入是在小爱同学3.0推出的,也就是去年的9月份左右.给大学生的生活提供了很大的遍历,但是就 ...

  4. 小爱课程表导入课程表功能开发(正方教务系统)

    前言 昨天开始了小爱课程表的开发,主要实现的功能是导入本校的教务系统课程表.今天完成并自测通过了,就等审核通过上线啦.现在就来记录一下这次开发. 具体的流程就不多说了,直接看开发者文档吧https:/ ...

  5. 用Python登陆新版正方教务系统获取课程表(及RSA加密密码实现)

    前言 最近做一个微信小程序,需要登录教务系统.提前用python尝试一下登录接口,并获取到课表打印出来. 我们学校用到新版正方教务系统,长这个样子. 相比旧版的教务系统,唯一好处是不用输入二维码方便爬 ...

  6. 我的第一个开源项目:Java爬虫爬取旧版正方教务系统课程表、成绩表

    Java爬虫爬取旧版正方教务系统课程表.成绩表 一.项目展示 1.正方教务系统 首页 2.爬虫系统 首页: 成绩查询: 课表查询: 二.项目实现 1.爬取思路描述 无论是成绩查询或课表查询亦或者其它的 ...

  7. 数据抓包(网络爬虫)-正方教务管理系统登录后获取自己的课程表

    上次发的博客是:数据抓包(网络爬虫)-正方教务管理系统登录 好的,今天我们来抓自己的课程表数据,说实话,都会模拟登录了,抓个课程表的什么就不再话下了. 直接来步骤: 1.首先还是监视浏览器中得到自己课 ...

  8. 新版正方教务管理系统API(获取课程表,考试,成绩,通知,自动抢课等)

    一个有关新版正方教务管理系统(如下图展示的主页面即为新版教务系统)的API,可以实现教务系统内基础的查询功能,未来还会添加选课抢课,一键评价等功能. 已实现与待实现 自动登陆.cookies获取 个人 ...

  9. SZTU深圳技术大学教务系统小爱课程表导入——强智科技13369

    作为个人来讲非常值得纪念的,具有一定流传度的,较为正规的小项目--小爱课程表导入,于2020/9/9正式完成.审核通过时间暂未明确,测试已经完美. 2020/9/16修复已知的BUG 2020/9/2 ...

最新文章

  1. python 高级语言特性_Pytohon学习笔记(一)Python编程语言历史及特性
  2. CentOS7.2安装MySql5.7并开启远程连接授权
  3. qmail 反垃圾邮件
  4. 手机扫描到WiFi时,WiFi站点知道吗?
  5. SQL Server 2008无日志文件附加数据库
  6. SA: 情感分析资源(Corpus、Dictionary)
  7. 【陷波滤波器】陷波滤波器设计与matlab仿真以及在PID控制器中的应用
  8. python验证码登录代码_Python模拟登录验证码(代码简单)
  9. 松下plc安装序列号afpsgr7_《松下PLC 编程软件 FPWINGR7 操作手册 中文高清版》.pdf...
  10. 时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
  11. 迅为4418开发板-驱动-以模块的方式编译内核驱动
  12. linux 电源管理 regulator,Linux电源管理-Linux regulator framework概述
  13. 设想一下未来二十年后的计算机,①沙尘暴预报是一项复杂的系统工程,它既需要遍布各地的气象检测...阅读答案...
  14. 3、移植UBOOT之新建单板-时钟-SDRAM-串口
  15. 【软件安装】CUDA安装失败+win10+VS2015+CUDA8.0+CUDAVisualStudioIntegration找不到+Visual Studio Intergration安装失败
  16. 人工智能AI主题汇总(至2023年02月11日)
  17. Word文档中--邮件合并
  18. Ubuntu 20.10 安装 gcc, g++,clang,make,make-guile
  19. 2021美赛数据分析全网首发(R语言 )
  20. 同一个浏览器登录不同账号_亚马逊又搞事情了!再来一波被关联封杀的账号,这些问题你不得不知道!...

热门文章

  1. ls路由算法_路由算法详解
  2. 【攻略】程序员“王者”攻略,用Scrapy抓取104个王者荣耀英雄数据后...
  3. java标签库 taglib pdf格式_JSP系列教材 (十)- JSTL Java Standard Tag Library 标准标签库...
  4. Linux wc命令使用
  5. mysql上限_MySQL自增ID达到上限的解决方法
  6. python如何给字符串排序_Python语言字符串排序方法
  7. “微软创投加速器”第四期启动,共有19家初创企业入驻
  8. 微信公众号页面遇到的坑
  9. bootstrap之navbar样式
  10. 和小程序斗智斗勇那些事