ctguoj-cli_校oj命令行版


python大作页做了一个校oj的命令行版. 源于之前刷LEETCODE使用 leetcode-cli 体验到了屌丝般顺滑…

开发环境:

  • python3
  • centos7.4 (64

功能演示:

ha

ctguoj list -c 显示比赛列表:

ctguoj list -p 显示题目列表

ctguoj show ranking 显示排名

ctguoj submit id 提交题目

ctguoj show help 显示帮助信息

代码结构

leetcode-cli 用的js,所以只能模仿功能。 我在网上找了v2ex和网易云音乐命令行版python源码 学习借鉴.

  • api.py 访问各个页面,返回页面对象response,验证码识别在内,网页请求用的requests.session() 得到session对象,保存cookie,加载cookie简化了很多操作:

  • operator.py 调用api内方法,得到页面html代码,用beatifulsoup解析显示,大部分代码在这里,比较重复,但是没个页面的结构不同,解析方法稍有区别,效率有待提高:

解析示例:

  • problem.py , contest.py , userInfo.py 分别表示题目类,比赛类,用户信息类. 主要用于设置属性,格式化输出信息:以简化的userInfo为例:

  • ctguoj.py 接收命令行参数,根据参数调用operator.py 内相应方法.
  • ShowMessage.py 用于辅助输出提示,警告和错误信息.

不足与改进:

  • ctguoj.py 中命令行参数解析可用 ArgumentParser,简化, 我全是if,else判断. 不过自己写的美观一些
  • BeatifulSoup 解析网页使用不够熟练,网页数据过多findAll查找解析较慢, 应该可以优化.
  • 结构设计,对扩展不开放,对修改不关闭… 添加功能需改动代码较多,不易维护.
  • 校oj网页结构还算简单,内网只能本校使用,开始应该搞一个nyoj,或者hdoj… 想了一下,万能模板好像也不太现实… 有想法的大佬可以一起做啊…

代码:

我的gayhub