hfut package¶
Submodules¶
hfut.interface module¶
-
class
hfut.interface.
BaseInterface
[source]¶ Bases:
object
所有接口的类的基类, 所有的接口都必须继承这个类.
通过实现构造函数
__init__
用来初始化self.extra_kwargs
用于生成请求需要的额外参数, 必须在所有的实现前调用基类的方法.所有的接口都要预定义
session_class
,request_kwargs
,send_kwargs
三个属性所有的接口都要实现静态方法
parse
用来将响应解析为规格化的结果.-
request_kwargs
= NotImplemented¶
-
send_kwargs
= NotImplemented¶
-
session_class
= NotImplemented¶
-
-
class
hfut.interface.
GetSystemStatus
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/s_welcome.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetClassStudents
(xqdm, kcdm, jxbh)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/Jxbmdcx_1.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetClassInfo
(xqdm, kcdm, jxbh)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/xqkb1_1.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
SearchCourse
(xqdm, kcdm=None, kcmc=None)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/xqkb1.asp', 'method': 'post'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetTeachingPlan
(xqdm, kclx='b', zydm='')[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/xqkb2.asp', 'method': 'post'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetTeacherInfo
(jsh)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'teacher/asp/teacher_info.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetCourseClasses
(kcdm)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/select_topRight_f3.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetEntireCurriculum
(xqdm=None)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'teacher/asp/Jskb_table.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
= (<class 'hfut.session.BaseSession'>, <class 'hfut.session.StudentSession'>)¶
-
-
class
hfut.interface.
GetCode
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/xqjh.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetMyInfo
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/xsxxxxx.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetMyAchievements
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/Select_Success.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetMyCurriculum
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/grkb1.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetMyFees
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/Xfsf_Count.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
ChangePassword
(password, new_password)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/amend_password_jg.asp', 'method': 'post'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
SetTelephone
(tel)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/amend_tel.asp', 'method': 'post'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetOptionalCourses
(kclx='x')[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/select_topLeft_f3.asp', 'method': 'get'}¶
-
send_kwargs
= {'allow_redirects': False}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetSelectedCourses
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/select_down_f3.asp', 'method': 'get'}¶
-
send_kwargs
= {'allow_redirects': False}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
ChangeCourse
(account, kcdms_data, jxbhs_data)[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/selectKC_submit_f3.asp', 'method': 'post'}¶
-
send_kwargs
= {'allow_redirects': False}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
GetUnfinishedEvaluation
[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/jxpglb.asp', 'method': 'get'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
-
class
hfut.interface.
EvaluateCourse
(kcdm, jxbh, r101=1, r102=1, r103=1, r104=1, r105=1, r106=1, r107=1, r108=1, r109=1, r201=3, r202=3, advice='')[source]¶ Bases:
hfut.interface.BaseInterface
-
request_kwargs
= {'url': 'student/asp/Jxpg_2.asp', 'method': 'post'}¶
-
send_kwargs
= {}¶
-
session_class
¶ alias of
StudentSession
-
hfut.log module¶
日志模块
-
hfut.log.
report_response
(response, request_headers=True, request_body=True, response_headers=False, response_body=False, redirection=False)[source]¶ 生成响应报告
Parameters: - response –
requests.models.Response
对象 - request_headers – 是否加入请求头
- request_body – 是否加入请求体
- response_headers – 是否加入响应头
- response_body – 是否加入响应体
- redirection – 是否加入重定向响应
Returns: str
- response –
hfut.parser module¶
页面解析相关的函数,如果你想自己编写接口可能用得到
-
class
hfut.parser.
GlobalFeaturedSoup
(markup='', parse_only=None, from_encoding=None, exclude_encodings=None, **kwargs)[source]¶ Bases:
bs4.BeautifulSoup
-
hfut.parser.
parse_tr_strs
(trs)[source]¶ 将没有值但有必须要的单元格的值设置为 None 将 <tr> 标签数组内的单元格文字解析出来并返回一个二维列表
Parameters: trs – <tr> 标签或标签数组, 为 bs4.element.Tag
对象Returns: 二维列表
-
hfut.parser.
flatten_list
(multiply_list)[source]¶ 碾平 list:
>>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]] >>> flatten_list(a) [1, 2, 3, 4, 5, 6, 7, 8]
Parameters: multiply_list – 混淆的多层列表 Returns: 单层的 list
-
hfut.parser.
dict_list_2_tuple_set
(dict_list_or_tuple_set, reverse=False)[source]¶ >>> dict_list_2_tuple_set([{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]) {(('c', 3), ('d', 4)), (('a', 1), ('b', 2))} >>> dict_list_2_tuple_set({(('c', 3), ('d', 4)), (('a', 1), ('b', 2))}, reverse=True) [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]
Parameters: - dict_list_or_tuple_set – 如果
reverse=False
为字典列表, 否则为元组集合 - reverse – 是否反向转换
- dict_list_or_tuple_set – 如果
hfut.session module¶
会话管理模块, 在 requests.Session
的基础上添加了一些针对接口的改进
-
class
hfut.session.
BaseSession
(campus)[source]¶ Bases:
requests.sessions.Session
所有接口会话类的基类
-
default_headers
= {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}¶
-
histories
= deque([], maxlen=10)¶
-
host
= None¶
-
-
class
hfut.session.
GuestSession
(campus)[source]¶ Bases:
hfut.session.BaseSession
-
class
hfut.session.
StudentSession
(account, password, campus)[source]¶ Bases:
hfut.session.BaseSession
学生教务接口, 继承了
models.GuestSession
的所有接口, 因此一般推荐使用这个类-
is_expired
¶ asp.net 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行, IIS中session默认过期时间为20分钟,网站配置 最长24小时,最小15分钟, 页面级>应用程序级>网站级>服务器级. .那么当超过 15 分钟未操作会认为会话已过期需要重新登录
Returns: 会话是否过期
-
hfut.shortcut module¶
-
class
hfut.shortcut.
Guest
(*args, **kwargs)[source]¶ Bases:
hfut.shortcut.BaseShortcuts
-
get_class_info
(xqdm, kcdm, jxbh)[source]¶ 获取教学班详情, 包括上课时间地点, 考查方式, 老师, 选中人数, 课程容量等等信息
@structure {‘校区’: str,’开课单位’: str,’考核类型’: str,’课程类型’: str,’课程名称’: str,’教学班号’: str,’起止周’: str, ‘时间地点’: str,’学分’: float,’性别限制’: str,’优选范围’: str,’禁选范围’: str,’选中人数’: int,’备注’: str}
Parameters: - xqdm – 学期代码
- kcdm – 课程代码
- jxbh – 教学班号
-
get_class_students
(xqdm, kcdm, jxbh)[source]¶ 教学班查询, 查询指定教学班的所有学生
@structure {‘学期’: str, ‘班级名称’: str, ‘学生’: [{‘姓名’: str, ‘学号’: int}]}
Parameters: - xqdm – 学期代码
- kcdm – 课程代码
- jxbh – 教学班号
-
get_course_classes
(kcdm)[source]¶ 获取选课系统中课程的可选教学班级(不可选的班级即使人数未满也不能选)
- @structure {‘可选班级’: [{‘起止周’: str, ‘考核类型’: str, ‘教学班附加信息’: str, ‘课程容量’: int, ‘选中人数’: int,
- ‘教学班号’: str, ‘禁选专业’: str, ‘教师’: [str], ‘校区’: str, ‘优选范围’: [str], ‘开课时间,开课地点’: [str]}],
‘课程代码’: str, ‘课程名称’: str}
Parameters: kcdm – 课程代码
-
get_entire_curriculum
(xqdm=None)[source]¶ 获取全校的学期课程表, 当没有提供学期代码时默认返回本学期课程表
@structure {‘课表’: [[[{‘上课周数’: [int], ‘课程名称’: str, ‘课程地点’: str}]]], ‘起始周’: int, ‘结束周’: int}
Parameters: xqdm – 学期代码
-
get_system_status
()[source]¶ 获取教务系统当前状态信息, 包括当前学期以及选课计划
@structure {‘当前学期’: str, ‘选课计划’: [(float, float)], ‘当前轮数’: int or None}
-
get_teacher_info
(jsh)[source]¶ 教师信息查询
- @structure {‘教研室’: str, ‘教学课程’: str, ‘学历’: str, ‘教龄’: str, ‘教师寄语’: str, ‘简 历’: str, ‘照片’: str,
- ‘科研方向’: str, ‘出生’: str, ‘姓名’: str, ‘联系电话’: [str], ‘职称’: str, ‘电子邮件’: str, ‘性别’: str, ‘学位’: str,
- ‘院系’: str]
Parameters: jsh – 8位教师号, 例如 ‘05000162’
-
-
class
hfut.shortcut.
Student
(*args, **kwargs)[source]¶ Bases:
hfut.shortcut.Guest
-
change_course
(select_courses=None, delete_courses=None)[source]¶ 修改个人的课程
@structure [{‘费用’: float, ‘教学班号’: str, ‘课程名称’: str, ‘课程代码’: str, ‘学分’: float, ‘课程类型’: str}]
Parameters: - select_courses – 形如
[{'kcdm': '9900039X', 'jxbhs': {'0001', '0002'}}]
的课程代码与教学班号列表, jxbhs 可以为空代表选择所有可选班级 - delete_courses – 需要删除的课程代码集合, 如
{'0200011B'}
Returns: 选课结果, 返回选中的课程教学班列表, 结构与
get_selected_courses
一致- select_courses – 形如
-
change_password
(new_password)[source]¶ 修改教务密码, 注意 合肥校区使用信息中心账号登录, 与教务密码不一致, 即使修改了也没有作用, 因此合肥校区帐号调用此接口会直接报错
@structure bool
Parameters: new_password – 新密码
-
check_courses
(kcdms)[source]¶ 检查课程是否被选
@structure [bool]
Parameters: kcdms – 课程代码列表 Returns: 与课程代码列表长度一致的布尔值列表, 已为True,未选为False
-
evaluate_course
(kcdm, jxbh, r101=1, r102=1, r103=1, r104=1, r105=1, r106=1, r107=1, r108=1, r109=1, r201=3, r202=3, advice='')[source]¶ 课程评价, 数值为 1-5, r1 类选项 1 为最好, 5 为最差, r2 类选项程度由深到浅, 3 为最好.
默认都是最好的选项
Parameters: - kcdm – 课程代码
- jxbh – 教学班号
- r101 – 教学态度认真,课前准备充分
- r102 – 教授内容充实,要点重点突出
- r103 – 理论联系实际,反映最新成果
- r104 – 教学方法灵活,师生互动得当
- r105 – 运用现代技术,教学手段多样
- r106 – 注重因材施教,加强能力培养
- r107 – 严格要求管理,关心爱护学生
- r108 – 处处为人师表,注重教书育人
- r109 – 教学综合效果
- r201 – 课程内容
- r202 – 课程负担
- advice – 其他建议,不能超过120字且不能使用分号,单引号,都好
Returns:
-
get_code
()[source]¶ 获取当前所有的学期, 学期以及对应的学期代码, 注意如果你只是需要获取某个学期的代码的话请使用
util.cal_term_code()
@structure {‘专业’: [{‘专业代码’: str, ‘专业名称’: str}], ‘学期’: [{‘学期代码’: str, ‘学期名称’: str}]}
-
get_my_achievements
()[source]¶ 获取个人成绩
@structure [{‘教学班号’: str, ‘课程名称’: str, ‘学期’: str, ‘补考成绩’: str, ‘课程代码’: str, ‘学分’: float, ‘成绩’: str}]
-
get_my_curriculum
()[source]¶ 获取个人课表
@structure {‘课表’: [[[{‘上课周数’: [int], ‘课程名称’: str, ‘课程地点’: str}]]], ‘起始周’: int, ‘结束周’: int}
-
get_my_fees
()[source]¶ 收费查询
@structure [{‘教学班号’: str, ‘课程名称’: str, ‘学期’: str, ‘收费(元): float’, ‘课程代码’: str, ‘学分’: float}]
-
get_my_info
()[source]¶ 获取个人信息
- @structure {‘婚姻状况’: str, ‘毕业高中’: str, ‘专业简称’: str, ‘家庭地址’: str, ‘能否选课’: str, ‘政治面貌’: str,
- ‘性别’: str, ‘学院简称’: str, ‘外语语种’: str, ‘入学方式’: str, ‘照片’: str, ‘联系电话’: str, ‘姓名’: str, ‘入学时间’: str, ‘籍贯’: str, ‘民族’: str, ‘学号’: int, ‘家庭电话’: str, ‘生源地’: str, ‘出生日期’: str, ‘学籍状态’: str, ‘身份证号’: str, ‘考生号’: int, ‘班级简称’: str, ‘注册状态’: str}
-
get_optional_courses
(kclx='x')[source]¶ 获取可选课程, 并不判断是否选满
@structure [{‘学分’: float, ‘开课院系’: str, ‘课程代码’: str, ‘课程名称’: str, ‘课程类型’: str}]
Parameters: kclx – 课程类型参数,只有三个值,{x:全校公选课, b:全校必修课, jh:本专业计划},默认为’x’
-
get_selectable_courses
(kcdms=None, dump_result=True, filename='可选课程.json', encoding='utf-8')[source]¶ 获取所有能够选上的课程的课程班级, 注意这个方法遍历所给出的课程和它们的可选班级, 当选中人数大于等于课程容量时表示不可选.
由于请求非常耗时且一般情况下用不到, 因此默认推荐在第一轮选课结束后到第三轮选课结束之前的时间段使用, 如果你仍然坚持使用, 你将会得到一个警告.
- @structure [{‘可选班级’: [{‘起止周’: str, ‘考核类型’: str, ‘教学班附加信息’: str, ‘课程容量’: int, ‘选中人数’: int,
- ‘教学班号’: str, ‘禁选专业’: str, ‘教师’: [str], ‘校区’: str, ‘优选范围’: [str], ‘开课时间,开课地点’: [str]}],
‘课程代码’: str, ‘课程名称’: str}]
Parameters: - kcdms – 课程代码列表, 默认为所有可选课程的课程代码
- dump_result – 是否保存结果到本地
- filename – 保存的文件路径
- encoding – 文件编码
-
get_selected_courses
()[source]¶ 获取所有已选的课程
@structure [{‘费用’: float, ‘教学班号’: str, ‘课程名称’: str, ‘课程代码’: str, ‘学分’: float, ‘课程类型’: str}]
-
hfut.util module¶
一些能够帮你提升效率的辅助函数
-
hfut.util.
get_point
(grade_str)[source]¶ 根据成绩判断绩点
Parameters: grade_str – 一个字符串,因为可能是百分制成绩或等级制成绩 Returns: 成绩绩点 Return type: float
-
hfut.util.
cal_gpa
(grades)[source]¶ 根据成绩数组计算课程平均绩点和 gpa, 算法不一定与学校一致, 结果仅供参考
Parameters: grades – models.StudentSession.get_my_achievements()
返回的成绩数组Returns: 包含了课程平均绩点和 gpa 的元组
-
hfut.util.
cal_term_code
(year, is_first_term=True)[source]¶ 计算对应的学期代码
Parameters: - year – 学年开始年份,例如 “2012-2013学年第二学期” 就是 2012
- is_first_term (bool) – 是否为第一学期
Returns: 形如 “022” 的学期代码
-
hfut.util.
term_str2code
(term_str)[source]¶ 将学期字符串转换为对应的学期代码串
Parameters: term_str – 形如 “2012-2013学年第二学期” 的学期字符串 Returns: 形如 “022” 的学期代码
-
hfut.util.
sort_hosts
(hosts, method='GET', path='/', timeout=(5, 10), **kwargs)[source]¶ 测试各个地址的速度并返回排名, 当出现错误时消耗时间为 INFINITY = 10000000
Parameters: - method – 请求方法
- path – 默认的访问路径
- hosts – 进行的主机地址列表, 如 [‘http://222.195.8.201/’]
- timeout – 超时时间, 可以是一个浮点数或 形如
(连接超时, 读取超时)
的元祖 - kwargs – 其他传递到
requests.request
的参数
Returns: 形如
[(访问耗时, 地址)]
的排名数据
hfut.value module¶
Module contents¶
合肥工业大学教务系统学生端接口以及方便开发者开发围绕学生数据的一些工具.