from io import BytesIO import openpyxl import cqwu from cqwu.errors import CookieError from cqwu.types.cp import CP class GetCP: async def get_cp( self: "cqwu.Client", year: int = None, semester: int = None, ) -> CP: """获取综合测评结果""" xue_nian = year or self.xue_nian xue_qi = semester or self.xue_qi await self.oauth_xg() url = "http://xg.cqwu.edu.cn/xsfw/sys/emapcomponent/imexport/export.do" headers = { "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,hu;q=0.5", "Connection": "keep-alive", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Origin": "http://xg.cqwu.edu.cn", "Referer": "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/*default/index.do", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51", "X-Requested-With": "XMLHttpRequest", } data = { "app": "zhcptybbapp", "contextPath": "http://xg.cqwu.edu.cn/xsfw", "module": "modules", "page": "cpjgcx", "action": "cpjgcxbgdz", "containerId": "cpjg_grid", "CPXN": str(xue_nian), "CPXQ": str(xue_qi), "filename": "综合测评结果", "colnames": "XH,XM,CPXN,CPXQ,DWDM,DZ_ZYFX,BJDM,ZCJ,BJPM,BJRS,ZYNJPM,ZYNJRS,FS1,FS10,FS11,FS12," "XZNJ,DZ_BJPM,DZ_ZYPM", } html = await self.request.post(url, headers=headers, data=data) if html.status_code != 200: raise CookieError() html_data = html.json() url = f"http://xg.cqwu.edu.cn/xsfw/sys/emapcomponent/file/getAttachmentFile/{html_data['attachment']}.do" xlsx_file = await self.request.get(url, headers=headers) wb = openpyxl.load_workbook(filename=BytesIO(xlsx_file.content)) ws = wb.active wz = ws[2] return CP( id=int(wz[0].value), name=wz[1].value, xue_nian=wz[2].value, xue_qi=wz[3].value, score=float(wz[7].value), class_rank=int(wz[8].value), class_member=int(wz[9].value), grade_rank=int(wz[10].value), grade_member=int(wz[11].value), dysz=float(wz[12].value), zysz=float(wz[13].value), cxsz=float(wz[14].value), wtsz=float(wz[15].value), zysz_class_rank=int(wz[17].value), zysz_grade_rank=int(wz[18].value), )