- 本项目所有代码均为个人编写(类库除外)
- 其中特别感谢
陈康
、王克纯
提供的帮助与技术支持 - 其中所有数据来源均通过
模拟登陆
、验证码识别
等实现 - 为了避免重复登陆耗时等,登陆Cookie及数据均通过Memcache或者MySQL缓存
- 本项目在上述数据的基础上进行了一些简单分析
- 其中部分内网网站的访问如一卡通、图书馆等使用了Nginx反向代理或者SSH端口映射
- 由于学校的限制,本项目并未开放给全校同学使用
- 代码全部遵循
PHP-FIG
规范 - 对外访问文件夹为
/public
- 自写简单框架,入口文件为
/public/action.php
使用反射执行代码 - 所有PHP代码均在 /Hnust/ 目录下,一级命名空间
Hnust
\Hnust\Config.php
为配置文件,定义全局的一些配置,部分动态配置从MySQL
中读取(中间通过Memcache
缓存),动态配置使用惰性加载
\Hnust\functions.php
文件定义一些常用的函数,其中input函数
参考了ThinkPHP中的I
函数\Hnust\Utils
命名空间定义了一些常用的工具类,其中包括惰性连接的Memcache
,惰性连接的MySQL
等\Hnust\Crawler
命名空间为所有的爬虫代码,包括教务网、财务网、一卡通、信息门户等\Hnust\Analyse
命名空间对所有的爬虫数据进一步分析处理,增加缓存以及读取缓存等\Hnust\Module
命名空间为所有的模块,对外提供访问,其中\Hnust\Module\Base
为基类,\Hnust\Module\Auth
为对基类增加了权限验证模块
- Node 主要是提供
Socket
与微信
两个服务 Socket
主要用于消息推送、记录实时日志、弹幕等功能微信
主要负责微信企业号的回调消息,以及为PHP端提供主动消息APImain.coffee
为入口文件,以及定义一些Express的路由wechat.coffee
主要负责微信被动消息wechatApi.coffee
主要提交微信API,获取微信用户信息、发送主动消息等youtu.coffee
主要利用腾讯云提供的优图人脸识别功能提供人脸识别
- 前端主要使用
Semantic UI
以及AngularJS
- 前端所有文件位于
/public/static
目录下,全静态模板文件 - 访问时默认通过
rewrite
发送前端index.html文件
- 提醒主要包括
成绩提醒
、选课提醒
、图书续期提醒
、图书续期提醒
,提醒通过WebSocket推送(Socket.io)、短信提醒(阿里大鱼)、邮件提醒(PHPMailer)、微信企业号提醒、安卓客户端(其他同学利用本网站API开发的查询APP) - 计划任务主要包括
数据库定时备份(shell脚本)
、删除过期或冗余数据
等 成绩提醒
主要分析考试安排,并且考试安排中的成绩尚未公布,则自动开启成绩提醒,成绩提醒通过轮训教务网实现图书续期
、图书超期
主要通过查询图书借阅情况,并且控制好在快过期时再查询图书借阅情况,如果借阅者尚未续借或归还,则帮其进行续借,如续借失败,则提示图书超期
- 成绩查询主要提供
个人成绩
、全班成绩
、全班成绩图片
个人成绩
全班成绩
均提供不及格、补考高亮显示全班成绩
可以根据学号、分数排序(分数排序支持分数制及等级制混合排序,Angular Filter
实现)全班成绩图片
使用PHP生成- 截图如下:
- 课表查询主要提供
个人课表
个人课表Excel版本下载
个人课表
可提供单周课表、全部课表(自己分割实现)Excel课表
使用PHPExcel实现- 截图如下:
- 截图如下:
- 截图如下:
- 空闲教室查询主要获取当前时间,判断当前周次、星期、节次
- 节次分析时充分考试夏季作息时间表及冬季作息时间表
- 截图如下:
- 教学评价,使用惰性提交,在用户评价页面并未先获取评价参数
- 暂无截图
##选课平台
- 由于每个学期选课时,教务网基本处于瘫痪状态,但本选课平台却能迅速抢到选课,原因如下:
- 选课平台使用提前登陆、选课列表缓存、
消息队列
等方式实现 提前登陆
当选课还没开始时,提前登陆教务网网站列表缓存
选课列表并不是用户访问时爬取数据,而是使用定时任务对选课列表进行更新,用户获取的列表为缓存列表,虽然数据更新可能不及时,但是加载速度更快,且更新不及时数据并不影响正常的选课消息队列
由于选课时教务网压力过大,服务器宕机几率大,并不能及时返回选课结果,在本项目上选课时,用户的操作只是加入消息队列
,服务器后端会有其他的进行对消息队列进行处理,只有当教务网返回选课成功或失败时,服务端才会认为该任务执行完成,并且通过socket推送或者邮件提醒等
方式提醒用户- 截图如下:
- 图书借阅使用了内网代理等方式实现
- 截图如下:
- 截图如下:
- 校园一卡通点击随机图片键盘的方式输入密码,在开发时遇到了一点困难,但依旧顺利解决
- 截图如下:
- 挂科率统计主要对成绩数据进行统计分析
- 可以按科目、学院、专业等方式显示
- 提供自动补全功能
- 截图如下:
- 使用动态配置,配置存于MySQL,中间通过Memcache进行缓存
- 配置可以随时修改,修改后会同时刷新Memcache
- 截图如下:
- 对网站数据进行一些简单统计分析
- 部分数据调用标签云进行显示
- 截图如下:
- 对用户的一些增加、删除、修改、锁定、等操作
- 统计用户的访问等
- 截图如下:
- 通过Socket或者其他方式对用户进行消息推送及统计推送情况等
- 截图如下:
- APP为其他同学调用网站API开发
- 可以统计APP的使用情况以及发布APP等
- APP存于七牛
- 截图如下:
- 提供实时日志(Socket.io)
- 访问日志的查询、检索等
- 截图如下:
- 提供查找相同选课的同学
- 通过上课教室反查上课班级
- 查询在某同一时间段无课的同学