All Projects → Febers → iUESTC

Febers / iUESTC

Licence: Apache-2.0 license
电子科技大学本科教务系统Android客户端

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to iUESTC

uestc-api
🏫 电子科技大学(UESTC)集成 API
Stars: ✭ 46 (+43.75%)
Mutual labels:  uestc
UESTC BBS
电子科技大学官方论坛“清水河畔”第三方Android客户端
Stars: ✭ 41 (+28.13%)
Mutual labels:  uestc
DMCL-2018
电子科技大学分布式存储与计算实验室2018新生学习资料整理
Stars: ✭ 76 (+137.5%)
Mutual labels:  uestc
uestc-temperature
电子科技大学本科生健康打卡助手。
Stars: ✭ 92 (+187.5%)
Mutual labels:  uestc
UESTC Lab Report LaTeX Template
A LaTeX Template for UESTC Lab Report
Stars: ✭ 40 (+25%)
Mutual labels:  uestc
uestc-evaluate-teacher.js
电子科大评教脚本
Stars: ✭ 22 (-31.25%)
Mutual labels:  uestc

iUESTC

关于

i成电 (iUESTC) 是一个为电子科技大学学生提供生活和学习帮助的 Android 客户端。由 @Febers 独立开发,目前只支持本科生使用

功能

  • 查看课表、成绩、当前学期考试情况
  • 图书馆图书检索功能
  • 查看校历、校车时刻表
  • 本科教学新闻查看
  • ......

项目实现

登录

在早些版本中,数据的获取是通过模拟登录实现的:首先对教务系统的登录过程进行抓包,然后通过 OKHttp 登录,核心代码中的请求体为

        FormBody formBody = new FormBody.Builder()
                .add("username",id)
                .add("password",pw)
                .add("lt",lt)
                .add("_eventId","submit")
                .add("dllt","userNamePasswordLogin")
                .add("execution",exec)
                .add("rmShown","1")
                .build();

上面的很多参数都隐藏在信息门户首页的 HTML 源代码中,解决方法是通过 Jsoup 解析 DOM 文档获取

之后教务系统将隐藏的验证码常规化,需要添加一个参数captchaResponse,同样可以通过抓包的方式获取

这种方式已经废弃,原因有下:

  • 模拟登录的状态保持是通过持久化 Cookie 实现的,但是 Cookie 的有效时间很短。一旦过期,登录状态将丢失,需要重新登录,所以每次请求都要判断登录状态是否有效,否则无法正确获取比如课表、考试情况等最新的信息
  • 登录或重新登录的过程非常繁琐,Java 代码模拟浏览器需要复杂的逻辑,并且需要本地保存用户账号密码
  • 教务系统的登录方式很有可能再次发生变化,旧的模拟登录方式将失效,届时应用将瘫痪

早期 git commit 写法不规范,很难找到以前的代码,可以在 Release 界面下载 Beta3.0 的源码,查看BeforeLoginModel.java文件

现在采取的方式为:通过 WebView 打开教务系统的登录界面,由用户手动登录,之后通过 WebView 的addJavascriptInterface方法拦截返回的代码判断是否登录成功——这其中牵扯到 Java 代码和 JavaScript 代码的交互,不再赘述

之后课表、考试信息的获取仍然是通过模拟浏览器的 POST 请求。最关键的一点在于:自定义 CookiesManager ,使得 OkHttpClient 可以共享 WebView 的 Cookie,这是一切的前提

其他

整体采用MVP的设计架构,网络请求框架为 OkHttp,UI则采用了开源框架 Fragmentation

整个项目的功能位于 module,每个功能模块按照 MVP 分层实现。其中 Model 层负责数据的获取和存取,View 层则负责显示数据,Presenter 充当上述两者的桥梁。

四、使用截图

五、开源相关

okhttpRecyclerViewAdapterFragmentationListItemViewmultiline-collapsingtoolbarMPAndroidChartSmartRefreshLayoutAndroid-PickerViewBottomNavigationjsoupgson

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].