def logout(self): url = "http://bdhq.ncepu.edu.cn/ncepucenter/common_logout.t" res = self.session.get(url, headers=get_fake_headers()) if res.status_code == 200: log("session logout successfully") else: log(f"session logout failed {res.text}") exit(-1)
def login(self) -> requests.Session: url = "http://bdhq.ncepu.edu.cn/ncepucenter/weixinlogin.json" session = requests.Session() data = { 'reg_name': self.account, 'password': self.password, } res = session.post(url, data=data, headers=get_fake_headers()) if res.json()['success']: log(f"login {self.account} successfully") return session log(f"login {self.account} failed {res.text}") exit(-1)
def cancel_order(self, cancel_set=None): assert isinstance(cancel_set, set) or cancel_set == None url = "http://yushiyuyue.ncepu.edu.cn/cancelGoodsOrder" ordered_number, ordered_time = self.ordered_bath_list() if len(ordered_number) == 0: log("当前未查询到已预约记录,请检查") self.logout() exit(-1) if not cancel_set: tip = "请输入要取消预约的编号,确认请输入exit,取消已选择的请输入clear" cancel_set = set() while True: print(tip, f"当前已选{len(cancel_set)}个 为", cancel_set) print(f"已预约编号如下,共{len(ordered_number)}个") for i in range(len(ordered_number)): suffix = "已选择" if i in cancel_set else "" print(f"编号:{i} 预约时间:{ordered_time[i]} {suffix}") temp = input() if temp == 'exit': break elif temp == 'clear': cancel_set.clear() continue try: temp = int(temp) except: print("请输入合法罗马数字!") continue if temp < 0 or temp >= len(ordered_number): print("请输入合法罗马数字!") else: cancel_set.add(temp) else: for one in cancel_set.copy(): if one not in ordered_time: log(f"cancel orderno error {one} not in {ordered_time}") self.logout() exit(-1) cancel_set.add(ordered_time.index(one)) cancel_set.remove(one) for i in cancel_set: data = {'orderno': ordered_number[i]} res = self.session.post(url, data=data, headers=get_fake_headers()) res = res.json() if res['returncode'] == 'SUCCESS': log(f'cancel orderno {ordered_number[i]} {ordered_time[i]} successfully' ) else: log(f'cancel orderno {ordered_number[i]} {ordered_time[i]} failed' ) return False return True
def order_bath(self, rulesid): _ = self.available_order_list() data = { 'bathroomid': self.bathroomid, 'appointdate': self.expected_day, 'rulesid': rulesid, 'sex': self.sex, 'goodslogo': self.goodslogo, 'bathroomname': self.bathroomname, } order_url = "http://yushiyuyue.ncepu.edu.cn/appointmentGoods" res = self.session.post(order_url, data=data, headers=get_fake_headers()) res = res.json() return res['returncode'] == 'SUCCESS'
def ordered_bath_list(self): _ = self.order_homepage() url = "http://yushiyuyue.ncepu.edu.cn/openCustomerOrderList" res = self.session.get(url, headers=get_fake_headers()) if res.status_code != 200: log(f"get ordered_bath_list failed {res.text}") self.logout() exit(-1) res = res.text ordered_number = re.findall(""\d+&", res) ordered_number = [re.findall("\d+", x)[0] for x in ordered_number] ordered_time = re.findall( ""\d{4}-\d{2}-\d{2} \d{2}:\d{2}-\d{2}:\d{2}", res) ordered_time = [x[6:] for x in ordered_time] assert len(ordered_number) == len(ordered_time) return ordered_number, ordered_time
def available_order_list(self): if re.match("^\d{4}-\d{2}-\d{2}$", self.expected_day) == None: log(f"order_list {self.expected_day} format wrong!") exit(-1) if datetime(year=int(self.expected_day[:4]), month=int(self.expected_day[5:7]), day=int(self.expected_day[8:]), hour=23, minute=59) < datetime.now(): log(f"wrong datetime {self.expected_day}") return [] _ = self.order_homepage() url = "http://yushiyuyue.ncepu.edu.cn/appointRules/queryAppointRules" data = {'goodsid': self.goodsid, 'appointdate': self.expected_day} res = self.session.post(url, data=data, headers=get_fake_headers()) # print(res.text) res = res.json() if res['returncode'] == 'SUCCESS': # log('get order_list successfully') res = res['jsonArr'] for one in res: start = one['timeslot'].split('-') end = start[1] start = start[0] day = self.get_expected_year_month_day() one['end'] = day.replace(hour=int(end[:2]), minute=int(end[3:])) one['start'] = day.replace(hour=int(start[:2]), minute=int(start[3:])) if one['msg'] == '已约满' or one['msg'] == '约满': one['msg'] = 0 else: one['msg'] = int(one['msg']) return res else: log('get order_list failed') exit(-1)
def order_homepage(self): order_show_url = f"http://yushiyuyue.ncepu.edu.cn/openHomePage?openid={self.account}" _ = self.session.get(order_show_url, headers=get_fake_headers()) order_show_url = "http://yushiyuyue.ncepu.edu.cn/openHomePage" return self.session.get(order_show_url, headers=get_fake_headers())