Support ZPublic HCP

This commit is contained in:
brian 2023-03-26 13:23:57 +08:00 committed by xtaodada
parent 127fcf2df9
commit 979d575182
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659
6 changed files with 203 additions and 32 deletions

View File

@ -1,9 +1,36 @@
import cqwu
from .get_cp import GetCP
from .get_public_cp import GetPublicCP
from .get_score import GetScore
from ...errors import CookieError
class XG(
GetCP,
GetPublicCP,
GetScore,
):
pass
async def oauth_xg(
self: "cqwu.Client",
):
url = "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/*default/index.do#/cjcx"
html = await self.oauth(url)
if not html:
raise CookieError()
if html.url != url:
raise CookieError()
url = "http://xg.cqwu.edu.cn/xsfw/sys/swpubapp/indexmenu/getAppConfig.do"
headers = {
'Accept': '*/*',
'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',
'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',
}
params = {
'appId': '5275772372599202',
'appName': 'zhcptybbapp',
'v': '021534151969418724',
}
await self.request.get(url, headers=headers, params=params)

View File

@ -16,26 +16,7 @@ class GetCP:
""" 获取综合测评结果 """
xue_nian = year or self.xue_nian
xue_qi = semester or self.xue_qi
url = "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/*default/index.do#/cjcx"
html = await self.oauth(url)
if not html:
raise CookieError()
if html.url != url:
raise CookieError()
url = "http://xg.cqwu.edu.cn/xsfw/sys/swpubapp/indexmenu/getAppConfig.do"
headers = {
'Accept': '*/*',
'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',
'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',
}
params = {
'appId': '5275772372599202',
'appName': 'zhcptybbapp',
'v': '021534151969418724',
}
await self.request.get(url, headers=headers, params=params)
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',

View File

@ -0,0 +1,70 @@
from typing import List
import cqwu
from cqwu.errors import CookieError
from cqwu.types.cp import CPGS, PublicCPRaw
class GetPublicCP:
async def get_public_cp(
self: "cqwu.Client",
page_size: int = 999,
page_number: int = 1,
total: bool = True,
) -> List[PublicCPRaw]:
""" 获取综合测评公示结果 """
await self.oauth_xg()
async def get_public_cp_raw(page_size_: int, page_number_: int) -> CPGS:
url = "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/modules/cpgs/cpgs_cpgsbg.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 = {
'querySetting': '[]',
'pageSize': str(page_size_),
'pageNumber': str(page_number_),
}
html = await self.request.post(url, headers=headers, data=data)
if html.status_code != 200:
raise CookieError()
html_data = html.json()
html_raw_data = html_data.get("datas", {}).get("cpgs_cpgsbg", {})
return (
CPGS(**html_raw_data)
if html_raw_data
else CPGS(
totalSize=0,
pageNumber=page_number_,
pageSize=page_size_,
rows=[],
)
)
return_datas: List[PublicCPRaw] = []
if total:
page_size = 999
page_number = 1
while True:
html_raw_datas = await get_public_cp_raw(page_size, page_number)
if len(html_raw_datas.rows) == 0:
break
return_datas.extend(html_raw_datas.rows)
if html_raw_datas.totalSize == 0:
break
elif html_raw_datas.pageNumber * html_raw_datas.pageSize >= html_raw_datas.totalSize:
break
else:
page_number += 1
else:
html_raw_datas = await get_public_cp_raw(page_size, page_number)
if len(html_raw_datas.rows) != 0:
return_datas.extend(html_raw_datas.rows)
return return_datas

View File

@ -1,9 +1,7 @@
import json
from typing import List
import cqwu
from cqwu import types
from cqwu.errors.auth import CookieError
class GetScore:
@ -20,14 +18,7 @@ class GetScore:
"""
year = year or self.xue_nian
semester = semester or self.xue_qi
url = "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/*default/index.do#/cjcx"
html = await self.oauth(url)
if not html:
raise CookieError()
if html.url != url:
raise CookieError()
await self.request.get(
"http://xg.cqwu.edu.cn/xsfw/sys/swpubapp/indexmenu/getAppConfig.do?appId=5275772372599202&appName=zhcptybbapp&v=046351851777942055")
await self.oauth_xg()
query_url = "http://xg.cqwu.edu.cn/xsfw/sys/zhcptybbapp/modules/cjcx/cjcxbgdz.do"
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',

View File

@ -1,3 +1,5 @@
from typing import List
from pydantic import BaseModel
@ -17,3 +19,103 @@ class CP(BaseModel):
wtsz: float
zysz_class_rank: int
zysz_grade_rank: int
class PublicCPRaw(BaseModel):
XH: str
XM: str
DWDM_DISPLAY: str
ZYDM_DISPLAY: str
BJDM_DISPLAY: str
ZCJ: float
BJPM: int
ZYNJPM: int
FS1: float
FS10: float
FS11: float
FS12: float
DYYSCJ: str
WTYSCJ: str
CXYSCJ: str
@property
def id(self) -> int:
""" 学号 """
return int(self.XH)
@property
def name(self) -> str:
""" 姓名 """
return self.XM
@property
def yuan_xi(self) -> str:
""" 院系 """
return self.DWDM_DISPLAY
@property
def zhuan_ye(self) -> str:
""" 专业 """
return self.ZYDM_DISPLAY
@property
def class_name(self) -> str:
""" 班级 """
return self.BJDM_DISPLAY
@property
def total_score(self) -> float:
""" 总成绩 """
return float(self.ZCJ)
@property
def class_rank(self) -> int:
""" 班级排名 """
return int(self.BJPM)
@property
def grade_rank(self) -> int:
""" 专业年级排名 """
return int(self.ZYNJPM)
@property
def dysz(self) -> float:
""" 德育素质分 """
return float(self.FS1)
@property
def zysz(self) -> float:
""" 智育素质测评 """
return float(self.FS10)
@property
def cxsz(self) -> float:
""" 创新素质测评 """
return float(self.FS11)
@property
def wtsz(self) -> float:
""" 文体素质 """
return float(self.FS12)
@property
def dysz_raw(self) -> float:
""" 德育原始成绩 """
return float(self.DYYSCJ)
@property
def wtsz_raw(self) -> float:
""" 文体原始成绩 """
return float(self.WTYSCJ)
@property
def cxsz_raw(self) -> float:
""" 创新原始成绩 """
return float(self.CXYSCJ)
class CPGS(BaseModel):
totalSize: int
pageNumber: int
pageSize: int
rows: List[PublicCPRaw]

View File

@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
setuptools.setup(
name="cqwu", # 用自己的名替换其中的YOUR_USERNAME_
version="0.0.9", # 包版本号,便于维护版本
version="0.0.10", # 包版本号,便于维护版本
author="omg-xtao", # 作者,可以写自己的姓名
author_email="xtao@xtaolink.cn", # 作者联系方式,可写自己的邮箱地址
description="A cqwu ehall client.", # 包的简述