Ejemplo n.º 1
0
    def _get_login_result_tip(self, html):
        """ 获取获取html的弹框提示信息 """
        tip = get_alert_tip(html)
        if tip:
            return tip

        raise LoginException(self.code, '教务系统请求异常')
    def _get_api(self, **kwargs):

        try:
            res = self._get(self.schedule_url, **kwargs)
        except TooManyRedirects:
            raise ScheduleException(self.code, '课表接口已关闭')
        except RequestException:
            raise ScheduleException(self.code, '获取课表请求参数失败')

        tip = get_alert_tip(res.text)
        if tip:
            raise ScheduleException(self.code, tip)

        schedule = ScheduleParse(res.text, self.time_list,
                                 self.schedule_type).get_schedule_dict()
        # 第一次请求的时候,教务系统默认返回当前学年学期课表
        # 如果设置了学年跟学期,则获取指定学年学期的课表
        if self.schedule_year and self.schedule_term and (
                self.schedule_year != schedule['schedule_year']
                or self.schedule_term != schedule['schedule_term']):

            payload = self._get_payload(res.text)

            try:
                res = self._post(self.schedule_url, data=payload, **kwargs)
            except RequestException:
                raise ScheduleException(self.code, '获取课表信息失败')

            schedule = ScheduleParse(res.text, self.time_list,
                                     self.schedule_type).get_schedule_dict()

        return schedule
Ejemplo n.º 3
0
 def _handle_login_result(self, res):
     ''' 处理页面弹框信息 '''
     if res is True:
         # 登录成功
         return
     tip = get_alert_tip(res.text)
     if tip:
         if tip == '验证码不正确!!':
             raise CheckCodeException(self.code, tip)
         raise IdentityException(self.code, tip)
     raise LoginException(self.code, '教务系统请求异常')
    def get_score(self, score_year=None, score_term=None, use_api=3, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3 ...
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.user.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)

        payload = {
            '__VIEWSTATE': view_state,
            'hidLanguage:': '',
            'btn_zcj': '历年成绩',
            'ddl_kcxz': '',
            'ddlXN': '',
            'ddlXQ': ''
        }
        payload1 = {
            '__VIEWSTATE': view_state,
            'hidLanguage:': '',
            'Button1': '成绩统计',
            'ddl_kcxz': '',
            'ddlXN': '',
            'ddlXQ': ''
        }
        try:
            res = self._post(score_url, data=payload, **kwargs)
            res1 = self._post(score_url, data=payload1, **kwargs)
        except TooManyRedirects:
            raise ScoreException(self.code, '成绩接口已关闭')
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        html = res.content.decode('GB18030')
        html1 = res1.content.decode('GB18030')
        tip = get_alert_tip(html)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, html, use_api,
                          html1).get_score(score_year, score_term)
    def get_student_info(self, use_api=3, **kwargs):
        '''
            成绩信息 获取入口
            :param score_year: 成绩学年
            :param score_term: 成绩学期
            :param use_api:    0.接口1, 1.接口2, 3.接口3 ...
            :param kwargs: requests模块参数
            return
        '''
        student_info_url = self.school_url['STUDENT_INFO_URL'][
            use_api] + self.user.account

        try:
            view_state = self._get_view_state(student_info_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是个人信息接口地址不对,请尝试更改use_api值'
            raise StudentException(self.code, msg)
        except TooManyRedirects:
            raise StudentException(self.code, '成绩接口已关闭导致无法获取个人信息')
        except RequestException:
            msg = '获取个人信息请求参数失败'
            raise StudentException(self.code, msg)

        payload = {
            '__VIEWSTATE': view_state,
            'hidLanguage:': '',
            'Button1': '',
            'ddl_kcxz': '',
            'ddlXN': '',
            'ddlXQ': ''
        }
        try:
            res = self._post(student_info_url, data=payload, **kwargs)
        except TooManyRedirects:
            raise ScoreException(self.code, '个人信息接口已关闭')
        except RequestException:
            raise ScoreException(self.code, '获取个人信息失败')

        html = res.content.decode('GB18030')
        tip = get_alert_tip(html)
        if tip:
            raise StudentException(self.code, tip)

        return StudentInfoParse(self.code, html, use_api).get_student_info()
Ejemplo n.º 6
0
    def get_score(self, score_year=None, score_term=None, use_api=0, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)

        payload = {
            '__VIEWSTATE': view_state,
            'Button2': '在校学习成绩查询',
            'btn_zcj': '历年成绩',
            'btnCx': ' 查  询 ',
            'ddlXN': '',
            'ddlXQ': ''
        }
        try:
            res = self._post(score_url, data=payload, **kwargs)
            if res.status_code == 302:
                raise ScoreException(self.code, '成绩接口已关闭')
            elif res.status_code != 200:
                raise RequestException
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        html = res.content.decode('GB18030')
        tip = get_alert_tip(html)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, html,
                          use_api).get_score(score_year, score_term)
Ejemplo n.º 7
0
    def _get_api(self, **kwargs):
        coding = 'gbk' if self.user_type else 'GB18030'
        try:
            res = self._get(self.schedule_url, **kwargs)

            if res.status_code == 302:
                raise ScheduleException(self.code, '课表接口已关闭')
            elif res.status_code != 200:
                raise RequestException
        except RequestException:
            raise ScheduleException(self.code, '获取课表请求参数失败')

        html = res.content.decode(coding)
        tip = get_alert_tip(html)
        if tip:
            raise ScheduleException(self.code, tip)

        schedule = ScheduleParse(html, self.time_list,
                                 self.schedule_type).get_schedule_dict()
        # 第一次请求的时候,教务系统默认返回最新课表
        # 如果设置了学年跟学期,匹配学年跟学期,不匹配则获取指定学年学期的课表
        if self.schedule_year and self.schedule_term:
            if self.schedule_year != schedule['schedule_year'] or \
                    self.schedule_term != schedule['schedule_term']:

                payload = self._get_payload(res.text)

                try:
                    res = self._post(self.schedule_url, data=payload, **kwargs)
                    if res.status_code != 200:
                        raise RequestException
                except RequestException:
                    raise ScheduleException(self.code, '获取课表信息失败')

                html = res.content.decode(coding)
                schedule = ScheduleParse(
                    html, self.time_list,
                    self.schedule_type).get_schedule_dict()

        return schedule
Ejemplo n.º 8
0
    def get_score(self, score_year=None, score_term=None, use_api=0, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3 ...
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.user.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)
        if score_year != None and score_term != None:
            # 按学年查询
            payload = {
                '__VIEWSTATE': view_state,
                'ddlXN': score_year,
                'ddlXQ': score_term,
                'txtQSCJ': '0',
                'txtZZCJ': '100',
                'Button1': '按学期查询'
            }
        elif score_year != None and score_term == None:
            # 按学期查询
            payload = {
                '__VIEWSTATE': view_state,
                'ddlXN': score_year,
                'ddlXQ': '',
                'txtQSCJ': '0',
                'txtZZCJ': '100',
                'Button5': '按学年查询'
            }
        elif score_year == None and score_term == None:
            # 在校成绩查询
            payload = {
                '__VIEWSTATE': view_state,
                'Button2': '在校学习成绩查询',
                'btn_zcj': '历年成绩',
                'btnCx': ' 查  询 ',
                'ddlXN': '',
                'ddlXQ': ''
            }

        try:
            res = self._post(score_url, data=payload, **kwargs)
        except TooManyRedirects:
            raise ScoreException(self.code, '成绩接口已关闭')
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        tip = get_alert_tip(res.text)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, res.text, use_api, score_year,
                          score_term).get_score(score_year, score_term)