def search(cls, keyword: str) -> SearchResult: """在 API Server 上搜索 :param keyword: 需要搜索的关键词 :return: 搜索结果列表 """ keyword = keyword.replace("/", "") resp = HttpRpc.call( method="GET", url='{}/search/query?key={}&page_size={}'.format( app.config['API_SERVER_BASE_URL'], keyword, 100), retry=True, headers={'X-Auth-Token': get_config().API_SERVER_TOKEN}) if resp["status"] != "success": raise RpcException('API Server returns non-success status') page_num = resp['info']['page_num'] search_result = SearchResult.make(resp) # 多页结果 if page_num > 1: for page_index in range(2, page_num + 1): resp = HttpRpc.call( method="GET", url='{}/search/query?key={}&page_size={}&page_index={}'. format(app.config['API_SERVER_BASE_URL'], keyword, 100, page_index), retry=True, headers={'X-Auth-Token': get_config().API_SERVER_TOKEN}) if resp["status"] != "success": raise RpcException('API Server returns non-success status') search_result.append(resp) return search_result
def cron_update_remote_manifest(): """更新数据最后更新时间""" from everyclass.server.rpc.http import HttpRpc # 获取安卓客户端下载链接 android_manifest = HttpRpc.call( method="GET", url="https://everyclass.cdn.admirable.pro/android/manifest.json", retry=True) android_ver = android_manifest['latestVersions']['mainstream'][ 'versionCode'] __app.config['ANDROID_CLIENT_URL'] = android_manifest['releases'][ android_ver]['url'] # 更新数据最后更新时间 _api_server_status = HttpRpc.call( method="GET", url=__app.config['API_SERVER_BASE_URL'] + '/info/service', retry=True, headers={'X-Auth-Token': __app.config['API_SERVER_TOKEN']}) __app.config['DATA_LAST_UPDATE_TIME'] = _api_server_status["data_time"]
def _verify(cls, ticket: str, rand_str: str, user_ip: str) -> bool: params = { "aid": current_app.config['TENCENT_CAPTCHA_AID'], "AppSecretKey": current_app.config['TENCENT_CAPTCHA_SECRET'], "Ticket": ticket, "Randstr": rand_str, "UserIP": user_ip } resp = HttpRpc.call(method="GET", url='https://ssl.captcha.qq.com/ticket/verify', params=params, retry=True) return bool(resp["response"])
def get_card(cls, semester: str, card_id: str) -> CardResult: """ 根据学期和card ID获得card :param semester: 学期,如 2018-2019-1 :param card_id: card ID :return: """ resp = HttpRpc.call( method="GET", url='{}/card/{}/timetable/{}'.format( app.config['API_SERVER_BASE_URL'], card_id, semester), retry=True, headers={'X-Auth-Token': get_config().API_SERVER_TOKEN}) if resp["status"] != "success": raise RpcException('API Server returns non-success status') search_result = CardResult.make(resp) return search_result
def get_classroom_timetable(cls, semester: str, room_id: str): """ 根据学期和教室ID获得教室课表 :param semester: 学期,如 2018-2019-1 :param room_id: 教室ID :return: """ resp = HttpRpc.call( method="GET", url='{}/room/{}/timetable/{}'.format( app.config['API_SERVER_BASE_URL'], room_id, semester), retry=True, headers={'X-Auth-Token': get_config().API_SERVER_TOKEN}) if resp["status"] != "success": raise RpcException('API Server returns non-success status') search_result = ClassroomTimetableResult.make(resp) return search_result
def get_student(cls, student_id: str): """ 根据学号获得学生课表 :param student_id: 学号 :return: """ resp = HttpRpc.call( method="GET", url='{}/student/{}'.format(app.config['API_SERVER_BASE_URL'], student_id), retry=True, headers={'X-Auth-Token': get_config().API_SERVER_TOKEN}) if resp["status"] != "success": raise RpcException('API Server returns non-success status') search_result = StudentResult.make(resp) return search_result
def register_by_email(cls, request_id: str, student_id: str): return HttpRpc.call(method='POST', url='{}/register_by_email'.format(app.config['AUTH_BASE_URL']), data={'request_id': request_id, 'student_id': student_id}, retry=True)
def get_result(cls, request_id: str): return HttpRpc.call(method='GET', url='{}/get_result'.format(app.config['AUTH_BASE_URL']), data={'request_id': request_id}, retry=True)
def register_by_password(cls, request_id: str, student_id: str, password: str): return HttpRpc.call(method='POST', url='{}/register_by_password'.format(app.config['AUTH_BASE_URL']), data={'request_id': request_id, 'student_id': student_id, 'password' : password})
def verify_email_token(cls, token: str): return HttpRpc.call(method='POST', url='{}/verify_email_token'.format(app.config['AUTH_BASE_URL']), data={"email_token": token}, retry=True)