# JMU-Class **Repository Path**: ximini/jmu-class ## Basic Information - **Project Name**: JMU-Class - **Description**: 集大课表导出 - **Primary Language**: PHP - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-25 - **Last Updated**: 2021-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JMU-Class 这是一个获取集美大学教务系统学生个人课程表并导出为ics文件的项目 (本人为初学者,有不会的地方是直接百度然后拼凑的,代码质量奇差务必,请轻喷💦) 项目后端为php,前端脚本为javascript ## 本次更新说明 优化php与python代码,调整json获取内容,更高效地实现了课程表导出 ## 使用说明 1. 首先通过i集大门户登录教务系统,找到并进入“我的课表” [教务系统登录链接](http://jwxt.jmu.edu.cn/student/sso/login) 2. 电脑浏览器请按F12打开开发者工具,找到并打开“控制台(console)”标签页,复制粘贴以下代码,并按回车键执行 ```javascript $.get("http://jwxt.jmu.edu.cn/student/ws/semester/get/"+$("#allSemesters").val(), function(data1) {$.get("http://jwxt.jmu.edu.cn/student/for-std/course-table/semester/"+$("#allSemesters").val()+"/print-data/0/"+studentId, function(data2) {$.post("https://api.ximin.top/jmu-class/?callback=?",'content={"c1":'+JSON.stringify(data1.startDate)+',"c2":'+JSON.stringify(data2.studentTableVm.activities)+'}',function(result){var blob=new Blob([result]);var link=document.createElement('a');link.href=window.URL.createObjectURL(blob);link.download="schedule.ics";link.click();});});}); ``` 注:手机用户推荐使用[eruda](https://github.com/liriliri/eruda/),通过在手机浏览器(推荐使用Chrome和Firefox或其它支持blob的浏览器)网址栏输入以下代码,会在页面右下角出现一个设置按钮,点击后打开"console"标签页,点击下方">"输入框,输入上方代码,再点击"Execute" ```javascript javascript:(function () { var script = document.createElement('script'); script.src="//cdn.jsdelivr.net/npm/eruda"; document.body.appendChild(script); script.onload = function () { eruda.init() } })(); ``` 3. 稍作等待,浏览器将会弹出下载提示,文件名为"schedule.ics" 4. 将该文件导入至日历,所有工作完成 ## 关于第三方课程表软件支持 目前支持Wakeup课程表 操作方法相同,但使用的js脚本不同,具体脚本如下 ```javascript $.get("http://jwxt.jmu.edu.cn/student/for-std/course-table/semester/"+$("#allSemesters").val()+"/print-data/0/"+studentId, function(data) {$.post("https://api.ximin.top/jmu-class/wakeup.php?callback=?",'content='+JSON.stringify(data.studentTableVm.activities),function(result){var blob=new Blob([result]);var link=document.createElement('a');link.href=window.URL.createObjectURL(blob);link.download="schedule-wakeup.csv";link.click();});}); ``` ## 获取原理 前端脚本自动获取allSemesters与studentId值后,访问指定页面获取本学期json数据与课表json数据后post到后端服务器,后端服务器处理生成ics文件内容并返回至前端,前端生成文件并执行下载(这个生成并执行下载的js代码是直接百度来的💦) ## 注意事项 1. 前端javascript脚本中`https://api.ximin.top/jmu-class/?callback=?`为本人的演示用api,目前可稳定运行,使用者也可以通过自行搭建php服务,替换脚本中的地址后使用 2. ~~目前仅适配2021-2022-1学期,其他学期可能不适配,正在研究中(wakeup课程表不受影响)~~ 教务系统返回每学期开学日都是周一,所以基本不用担心适配的问题 ## Python版 源码和打包完的可执行文件位于python文件夹中 初学Python,百度ctrl-c+v整出了个Python版,因为看学长做的课表导出([JMU_JSON2ICS](https://gitee.com/tinyclown/jmu-json2ics))用的语言是Python,所以想试试自己整整( ~~然而并不好用,我导出的json长度过长,无法正常输入,需要编辑源码,用导出的json直接替换开头的input进行赋值,然后运行~~ 新使用方式:将js脚本导出的“json.txt”放置在py脚本所在目录下,执行一遍py脚本,就会输出ics格式的icalendar文件 然而咱就一初学者,能写出什么好东西💦 使用的json导出脚本: ```javascript $.get("http://jwxt.jmu.edu.cn/student/ws/semester/get/"+$("#allSemesters").val(), function(data1) {$.get("http://jwxt.jmu.edu.cn/student/for-std/course-table/semester/"+$("#allSemesters").val()+"/print-data/0/"+studentId, function(data2) {var blob=new Blob(['{"c1":'+JSON.stringify(data1.startDate)+',"c2":'+JSON.stringify(data2.studentTableVm.activities)+'}']);var link=document.createElement('a');link.href=window.URL.createObjectURL(blob);link.download="json.txt";link.click();});}); ```