半年前我曾经制作过一个自动查分系统,这次我利用课程设计的机会,将这个系统重新制作成为了一个可以在浏览器中自助注册添加用户的B/S版查分系统。

除了功能上面增强了以外,我还将底层全部重写了一遍。这次使用的是可可熊的PyFetion来制作的短信发送功能,抓取功能由原来的PHP curl库改成用Python的urllib库。因此整个系统的功能实现只采用Python,降低了系统部署的难度。在功能提升的同时,我还利用PHP写了一个简单的注册系统。将注册系统部署好后,别的同学可以通过网络浏览器自己注册并使用该系统,免去了人工配置的麻烦。

整体系统设计方案

整个系统通过Python结合urllib库模拟用户登陆学生URP教务系统,并访问指定页面获取本学期该学生的成绩信息。并将包含成绩信息的HTML代码全部抓取下来。之后通过控制Python调用Linux下面Sed文本编辑器,对抓取的HTML信息代码进行剪裁提取,获得具有可读性的成绩信息。之后通过Python结合MySQL库将成绩保存到数据库中。

Python程序还将判断这次抓取后的成绩是否和上次抓取的相一致,如果不一致,则调用PyFetion库登陆飞信发短信报警。用户信息保存在MySQL数据库中,用户的添加是通过PHP程序来操控MySQL数据库实现的。

网页端采用了XHTML+CSS+Javascript的JQuery库来实现。因为采用了AJAX技术,使得该系统可以给予用户良好的操作体验。

整个系统启动需要启动Apache,MySQL和judge.py,其中Apache和MySQL是提供网页的运行环境,而judge.py则是采用轮循的方式对数据库中每个注册的用户进行扫描,调用ScoreScanner.py程序来判断是否需要发送短信。

因为课设时间紧,整个系统目前还有很多不足和亟待改进之处,已知的有:

    1. 现在用户注册时候必须提供自己的飞信密码,实现自己给自己发飞信。这样做的缺点是个人飞信密码容易泄露,同时查分时会干扰正常的飞信使用(会导致异常断线)。下一个版本应该改进为由某个用户统一给同学发飞信。
    1. 定时查分程序较为简陋。这次因为在使用Crontab做延时的时候总是出现一些问题,最后只好舍弃Crontab,改用Python自己的延时来实现。
    1. 分数转换部分的sed脚本还存在问题。在遇到某些特殊的课程的时候会导致转换错误。
    1. 缺乏用户自助管理系统,注册完后用户资料没法修改。

项目地址:http://code.google.com/p/caufetion/