def __init__(self): Tool.cls() if settings.user_token != "0" and settings.user_token != "": _logger.i("尝试复用token") res = requests.get( url= 'https://gateway.vocabgo.com/Student/Main?timestamp={}&versions={}' .format(Tool.time(), CDR_VERSION), headers=settings.header) code = res.json()["code"] res.close() if code == 1: _logger.i("授权成功") _logger.i("user_token:" + settings.user_token, is_show=False) return else: _logger.i("曾用token已失效,重新执行授权流程!") Login._generate_qr_code() res = requests.get( url= 'https://gateway.vocabgo.com/Student/Main?timestamp={}&versions={}' .format(Tool.time(), CDR_VERSION), headers=settings.header) code = res.json()["code"] res.close() count = 0 while code != 1: _logger.i("等待授权中......") count = count + 1 time.sleep(5) if count == 6: count = 0 _logger.v("1. 继续等待\n2. 重新生成二维码\n\n0. 返回上一级") code_type = input("请输入指令:") if code_type == "1": continue elif code_type == "2": Login._generate_qr_code() continue elif code_type == "0": return else: sys.exit(0) res = requests.get( url= 'https://gateway.vocabgo.com/Student/Main?timestamp={}&versions={}' .format(Tool.time(), CDR_VERSION), headers=settings.header) code = res.json()["code"] res.close() _logger.i("授权成功") os.remove(f"{CONFIG_DIR_PATH}授权二维码.jpg") settings.save() return
async def run(self): course_id = self.__course_id task_list, json_data = await MyselfTask.get_task_list(course_id) Tool.cls() while True: _logger.v("请输入序号去选择要做的任务:\n") _logger.v(f"{json_data['course_name']}\n当前进度:{json_data['progress']}%\n" + f"累计用时:{Tool.convert_time(json_data['time_spent'])}") for i, task in enumerate(task_list): _logger.v(f"{i + 1:2d}. {task['task_name']:20s} [{task['progress']}%]({task['score']:2.1f}分)") _logger.v("\n#. 以空格分割可一次性选择多个任务") _logger.v(f"#. 你可以在“main{CONFIG_DIR_PATH[1:]}config.txt文件”中修改配置项以控分/修改做题时间间隔等") _logger.v("\n\n0. 选择全部任务\n\n请输入序号:", end="") choose = ' '.join(input("").split()).split(" ") _logger.v(choose, is_show=False) task_choose_list = [] tem_flag = True if CDRTask.check_input_data(choose[0], 0): task_choose_list = task_list else: for c in choose: if not CDRTask.check_input_data(c, len(task_list)): tem_flag = False Tool.cls() _logger.i("输入格式有误!\n") break task_choose_list.append(task_list[int(c) - 1]) if tem_flag: break # 课程单词预处理加载 self._courses_set.add(course_id) course_map = await self.course_pretreatment() Tool.cls() for task in task_choose_list: self._tasks.add_task([ self.do_task(task, course_id, course_map[course_id]) for _ in range(settings.multiple_task) ]) await self.start_task() _logger.i("本次全部任务已完成!") input("按回车键返回上一级")
def do_homework(): Login() URL.load_main() # 模拟加载流程 requests.options("https://app.vocabgo.com/student/", headers=settings.header).close() res = requests.get( "https://gateway.vocabgo.com/Student/Main?timestamp=" f"{Tool.time()}&versions={CDR_VERSION}", headers=settings.header) json = res.json()["data"] res.close() # 模拟加载流程 requests.get( "https://gateway.vocabgo.com/Student/Contest/List?timestamp=" f"{Tool.time()}&versions={CDR_VERSION}", headers=settings.header).close() timestamp = Tool.time() sign = Tool.md5( f'return_url=https%3A%2F%2Fapp.vocabgo.com%2Foverall%2F×tamp={timestamp}' f'&versions={CDR_VERSION}ajfajfamsnfaflfasakljdlalkflak') data = { "return_url": "https%3A%2F%2Fapp.vocabgo.com%2Foverall%2F", "timestamp": timestamp, "versions": CDR_VERSION, "sign": sign } res = requests.post(url='https://gateway.vocabgo.com/Auth/Wechat/Config', headers=settings.header, json=data) _logger.i("WechatConfig:") _logger.i(res.content.decode("utf8")) res.close() time.sleep(1) # 信息显示 Tool.cls() loop = asyncio.get_event_loop() while True: if json['user_info'].get('class_name') is None: _logger.v(f"\n{json['user_info']['student_name']}(未加入班级)\n") else: _logger.v( f"\n{json['user_info']['student_name']}({json['user_info']['class_name']})\n" ) _logger.v("1.班级任务\n2.自选任务\n3.删除本地授权信息(可更换账号刷题)" "\n4.打开配置文件(关闭后将自动重载配置文件,记得保存)" "\n\n#.加群1085739587免费获取最新版,更少的BUG、更高的准确率\n\n0.退出\n") settings.save() choose = input("请输入序号:") if choose == "1": _logger.i("正在加载任务列表中,请稍等......") loop.run_until_complete(ClassTask().run()) Tool.cls() elif choose == "2": _logger.i("正在加载任务列表中,请稍等......") URL.load_myself_task_list() loop.run_until_complete( MyselfTask(json['user_info']['course_id']).run()) Tool.cls() elif choose == "3": settings.user_token = "" settings.save() Login() Tool.cls() elif choose == "4": os.system(f'notepad {CONFIG_DIR_PATH + "config.txt"}') settings.reload() Tool.cls() elif choose == "0": aiorequset.close_session() sys.exit(0) else: Tool.cls() _logger.i("输入格式有误!\n") res = requests.get( "https://gateway.vocabgo.com/Student/Main?timestamp=" f"{Tool.time()}&versions={CDR_VERSION}", headers=settings.header) json = res.json()["data"] res.close()
async def run(self): task_type_list = ["未知", "学习", "测试"] over_status_list = ["未知", "未开始", "进行中", "已过期"] time_type_list = ["未知", "开始", "截止", "截止"] task_list = await ClassTask.get_task_list() # 任务选择 if len(task_list) == 0: _logger.i("全部任务已完成,无可做任务") input("按回车键返回上一级") return Tool.cls() while True: _logger.v("请输入序号去选择要做的任务:\n") for i, task in enumerate(task_list): time_stamp = task['start_time'] if task['over_status'] != 1: time_stamp += task['over_time'] time_stamp /= 1000 _logger.i(time_stamp, is_show=False) import time format_time = time.strftime("%m{m}%d{d} %H:%M:%S", time.localtime(time_stamp)).format(m="月", d="号") _logger.i(format_time, is_show=False) _logger.v(f"{i + 1:2d}. [{task_type_list[task['task_type']]}]" + f"[{over_status_list[task['over_status']]}] {task['task_name']:20s}" + f"({task['score']:2.1f}分) {format_time}{time_type_list[task['over_status']]}") _logger.v("\n#. 以空格分割可一次性选择多个任务") _logger.v(f"#. 你可以在“main{CONFIG_DIR_PATH[1:]}config.txt文件”中修改配置项以控分/修改做题时间间隔等") _logger.v("\n\n0. 选择全部任务\n\n请输入序号:", end="") choose = ' '.join(input("").split()).split(" ") _logger.v(choose, is_show=False) task_choose_list = [] tem_flag = True if CDRTask.check_input_data(choose[0], 0): task_choose_list = task_list else: for c in choose: if not CDRTask.check_input_data(c, len(task_list)): tem_flag = False Tool.cls() _logger.i("输入格式有误!\n") break task_choose_list.append(task_list[int(c) - 1]) if tem_flag: break # 课程单词预处理加载 for task in task_choose_list: course_id = task.get("course_id") or re.match(r'.*/(.*)\.jpg', task["course_img_url"]).group(1) self._courses_set.add(course_id) course_map = await self.course_pretreatment() Tool.cls() for task in task_choose_list: # 未过期任务 # over_status为任务标识,1:未开始 2:进行中 3:已过期 # task_id仅作为辅助标识,若任务是多单元混合,其为-1,若是单独,则其为对应课程号 # task_type为任务类型标识(未证实) 1:学习任务 2:测试任务 course_id = task.get("course_id") or re.match(r'.*/(.*)\.jpg', task["course_img_url"]).group(1) self._tasks.add_task([ self.do_task(task, course_id, course_map[course_id]) for _ in range(settings.multiple_task) ]) await self.start_task() # 防止线程数量不足而独立于主线程完成任务 # self._progress.clear() _logger.i("本次全部任务已完成!") input("按回车键返回上一级")