diff --git a/.gitignore b/.gitignore index b6c878f..d9bd8ee 100644 --- a/.gitignore +++ b/.gitignore @@ -130,4 +130,5 @@ dmypy.json # custom cookies.json -history.json \ No newline at end of file +history.json +.idea/ \ No newline at end of file diff --git a/CDNDrive/__init__.py b/CDNDrive/__init__.py index 1a94007..136aacf 100644 --- a/CDNDrive/__init__.py +++ b/CDNDrive/__init__.py @@ -7,4 +7,4 @@ __author__ = "ApacheCN" __email__ = "apachecn@163.com" __license__ = "SATA" -__version__ = "2022.3.20.0" +__version__ = "2022.5.14.0" diff --git a/CDNDrive/drivers/ChaoXingApi.py b/CDNDrive/drivers/ChaoXingApi.py new file mode 100644 index 0000000..787d7db --- /dev/null +++ b/CDNDrive/drivers/ChaoXingApi.py @@ -0,0 +1,112 @@ +# coding: utf-8 +import re +from CDNDrive.util import * +from .BaseApi import BaseApi + + +class ChaoXingApi(BaseApi): + headers = { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Chrome/84.0.4147.125 Safari/537.36' + } + default_url = lambda self, obj_id: f"http://p.ananas.chaoxing.com/star3/origin/{obj_id}.png" + extract_obj_id = lambda self, s: re.findall(r"[a-fA-F0-9]{32}", s)[0] + get_cookies = lambda self: self.cookies + + def __init__(self): + super().__init__() + self.cookies = load_cookies('chaoxing') + + def meta2real(self, url): + if re.match(r"^cxdrive://[a-fA-F0-9]{32}$", url): + return self.default_url(self.extract_obj_id(url)) + else: + return None + + def real2meta(self, url): + if re.match(r"^http://p.ananas.chaoxing.com/star3/origin/[a-fA-F0-9]{32}.png$", url): + return "cxdrive://" + self.extract_obj_id(url) + else: + return None + + def set_cookies(self, cookie_str): + self.cookies = parse_cookies(cookie_str) + save_cookies('chaoxing', self.cookies) + + def login(self, username, password): + headers = ChaoXingApi.headers.copy() + login_api = "https://passport2.chaoxing.com/api/login" + params = { + "name": username, + "pwd": password, + "verify": "0", + "schoolid": '' + } + resp = request_retry( + "get", login_api, params=params, + headers=headers, + cookies=self.cookies + ) + if resp.status_code == 403: + result = f"{username}登录得到403,登录请求被拒绝" + return {'code': 114514, 'message': result} + + data = json.loads(resp.text) + if not data['result']: + result = f'{username}登录失败' + return {'code': 114514, 'message': result} + + self.cookies = resp.cookies.get_dict() + save_cookies('chaoxing', self.cookies) + return {'code': 0, 'message': '登录成功'} + + def get_user_info(self, fmt=True): + headers = ChaoXingApi.headers.copy() + check_url = 'http://mooc1-1.chaoxing.com/api/workTestPendingNew' + resp = request_retry( + "get", check_url, + headers=headers, + cookies=self.cookies + ) + if '登录' in resp.text: + return '用户未登录' + else: + info_url = 'http://passport2.chaoxing.com/mooc/accountManage' + resp = request_retry( + "get", info_url, + headers=headers, + cookies=self.cookies + ) + name = re.findall(r"messageName\">(.*?)(.*?)