def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark: mark = Mark(exam=exam) r = self._session.get(Url.GET_MARK_URL, params={"examId": exam.id}, headers=self.__get_auth_header()) json_data = r.json() if json_data["errorCode"] != 0: raise Exception(json_data["errorInfo"]) json_data = json_data["result"] # exam.name = json_data["total_score"]["examName"] # exam.id = json_data["total_score"]["examId"] for subject in json_data["paperList"]: mark.append( SubjectScore(score=subject["userScore"], subject=Subject( id=subject["paperId"], name=subject["subjectName"], code=subject["subjectCode"], standard_score=subject["standardScore"], exam=exam), person=self, create_time=0)) if has_total_score: total_score = json_data["totalScore"] mark.append( SubjectScore(score=total_score["userScore"], subject=Subject( id="", name=total_score["subjectName"], code="99", standard_score=total_score["standardScore"], exam=exam), person=self, create_time=0)) return mark
def get_latest_exam(self) -> ExamInfo: """获取最新考试""" r = self._session.get(Url.GET_RECENT_EXAM_URL, headers=self.__get_auth_header()) if not r.ok: raise PageConnectionError( f"get_latest_exam中出错, 状态码为{r.status_code}") try: json_data = r.json()["result"] exam_info_data = json_data["examInfo"] subjects = ExtendedList() for subject_data in exam_info_data["subjectScores"]: subjects.append( Subject(id=subject_data["topicSetId"], name=subject_data["subjectName"], code=subject_data["subjectCode"])) exam_info = ExamInfo(id=exam_info_data["examId"], name=exam_info_data["examName"], subjects=subjects, classId=exam_info_data["classId"], grade_code=json_data["gradeCode"], is_final=exam_info_data["isFinal"]) exam_info.create_time = exam_info_data["examCreateDateTime"] except (JSONDecodeError, KeyError) as e: raise PageInformationError( f"get_latest_exam中网页内容发生改变, 错误为{e}, 内容为\n{r.text}") return exam_info
def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark: mark = Mark(exam=exam, person=self) r = self._session.get(Url.GET_MARK_URL, params={"examId": exam.id}, headers=self.__get_auth_header()) if not r.ok: raise PageConnectionError( f"__get_self_mark中出错, 状态码为{r.status_code}") try: json_data = r.json() json_data = json_data["result"] # exam.name = json_data["total_score"]["examName"] # exam.id = json_data["total_score"]["examId"] for subject in json_data["paperList"]: subject_score = SubjectScore( score=subject["userScore"], subject=Subject(id=subject["paperId"], name=subject["subjectName"], code=subject["subjectCode"], standard_score=subject["standardScore"], exam=exam), person=StuPerson()) # subject_score.create_time = 0 mark.append(subject_score) total_score = json_data.get("totalScore") if has_total_score and total_score: subject_score = SubjectScore( score=total_score["userScore"], subject=Subject( id="", name=total_score["subjectName"], code="99", standard_score=total_score["standardScore"], exam=exam, ), person=StuPerson(), class_extraRank=ExtraRank(rank=exam.class_rank), grade_extraRank=ExtraRank(rank=exam.grade_rank)) # subject_score.create_time = 0 mark.append(subject_score) except (JSONDecodeError, KeyError) as e: raise PageInformationError( f"__get_self_mark中网页内容发生改变, 错误为{e}, 内容为\n{r.text}") return mark
def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark: mark = Mark(exam=exam, person=self) r = self._session.get(Url.GET_MARK_URL, params={"examId": exam.id}, headers=self.__get_auth_header()) json_data = r.json() if json_data["errorCode"] != 0: raise Exception(json_data["errorInfo"]) json_data = json_data["result"] # exam.name = json_data["total_score"]["examName"] # exam.id = json_data["total_score"]["examId"] for subject in json_data["paperList"]: subject_score = SubjectScore( score=subject["userScore"], subject=Subject(id=subject["paperId"], name=subject["subjectName"], code=subject["subjectCode"], standard_score=subject["standardScore"], exam=exam), person=StuPerson()) # subject_score.create_time = 0 mark.append(subject_score) total_score = json_data.get("totalScore") if has_total_score and total_score: subject_score = SubjectScore( score=total_score["userScore"], subject=Subject( id="", name=total_score["subjectName"], code="99", standard_score=total_score["standardScore"], exam=exam, ), person=StuPerson(), class_rank=ExtraRank(rank=exam.classRank), grade_rank=ExtraRank(rank=exam.gradeRank)) # subject_score.create_time = 0 mark.append(subject_score) return mark
def __get_subjects(self, exam: Exam) -> ExtendedList[Subject]: subjects = ExtendedList() r = self._session.get(Url.GET_SUBJECT_URL, params={"examId": exam.id}, headers=self.__get_auth_header()) json_data = r.json() if json_data["errorCode"] != 0: raise Exception(json_data["errorInfo"]) for subject in json_data["result"]["paperList"]: subjects.append( Subject(id=subject["paperId"], name=subject["subjectName"], code=subject["subjectCode"], standard_score=subject["standardScore"], exam=exam)) return subjects
def get_subject(self, subject_data: Union[Subject, str], exam_data: Union[Exam, str] = None) -> Subject: """获取指定考试的学科 Args: subject_data (Union[Subject, str]): 学科id 或 学科名称, 为Subject实例时直接返回 exam_data (Union[Exam, str]): 考试id 或 考试名称 或 Exam实例, 默认值为最新考试 Returns: Subject """ if isinstance(subject_data, Subject): return subject_data exam = self.get_exam(exam_data) if exam is None: return Subject() return self.__get_subject(exam, subject_data)
def __get_class_score(self, classId: str, subjectId: str) -> List[SubjectScore]: r = self._session.get(Url.GET_REPORT_URL, params={ "type": "export_single_paper_zip", "classId": classId, "studentNum": "", "topicSetId": subjectId, "topicNumber": "0", "startScore": "0", "endScore": "10000", }) data = r.json() subjectScores = ExtendedList() for pair in data["result"]: subjectScores.append( SubjectScore(score=pair["userScore"], person=Person(name=pair["userName"]), subject=Subject(id=subjectId))) return subjectScores
def __get_subjects(self, exam: Exam) -> ExtendedList[Subject]: subjects = ExtendedList() r = self._session.get(Url.GET_SUBJECT_URL, params={"examId": exam.id}, headers=self.__get_auth_header()) if not r.ok: raise PageConnectionError( f"__get_subjects中出错, 状态码为{r.status_code}") try: json_data = r.json() for subject in json_data["result"]["paperList"]: subjects.append( Subject(id=subject["paperId"], name=subject["subjectName"], code=subject["subjectCode"], standard_score=subject["standardScore"], exam=exam)) except (JSONDecodeError, KeyError) as e: raise PageInformationError( f"__get_subjects中网页内容发生改变, 错误为{e}, 内容为\n{r.text}") return subjects