def request_add_shopcart(self, order, rebot, sta_mode=1): """ 加入购物车 """ line = order.line base_url = "http://www.96096kp.cn/UserData/ShopCart.aspx" headers = { "User-Agent": rebot.user_agent, "Referer": "http://www.96096kp.cn/TicketMain.aspx", "Origin": "http://www.96096kp.cn", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) params = { "classInfo": json.dumps(line.extra_info["raw_info"], ensure_ascii=False), "drBusStationCode": line.s_sta_id, "drBusStationName": line.s_sta_name, "ticketHalfCount": 0, "ticketFullCount": order.ticket_amount, "ticketChildCount": 0, "cmd": "buyTicket", } if sta_mode == 2: lst = [] for r in order.riders: lst.append("1~%s~1~%s~%s~0~false" % (r["name"], r["id_number"], r["telephone"])) params.update({ "passengerMsg": "|".join(lst), "contactMsg": "%s~%s~" % (order.contact_info["name"], order.contact_info["telephone"]), "isIns": "false", }) r = rebot.http_post( base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies, ) try: res = json.loads(trans_js_str(r.content)) except Exception, e: rebot.modify(ip="") raise e
def request_get_shoptcart(self, rebot): """ 获取购物车条目 """ base_url = "http://www.96096kp.cn/UserData/ShopCart.aspx" headers = { "User-Agent": rebot.user_agent, "Referer": "http://www.96096kp.cn/TicketMain.aspx", "Origin": "http://www.96096kp.cn", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) params = { "cmd": "getCartItemList", } r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) return json.loads(trans_js_str(r.content))
def request_add_shopcart(self, order, rebot, sta_mode=1): """ 加入购物车 """ line = order.line base_url = "http://211.162.125.225/UserData/ShopCart.aspx" headers = { "User-Agent": rebot.user_agent, "Referer": "http://211.162.125.225/User/Default.aspx", "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) params = { "classInfo": json.dumps(line.extra_info["raw_info"], ensure_ascii=False), "drBusStationCode": line.s_sta_id, "drBusStationName": line.s_sta_name, "ticketFullCount": order.ticket_amount, "ticketType": "1", "cmd": "buyTicket", "IsAgreeBX": "false" } r = rebot.http_post( base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies, ) try: res = json.loads(trans_js_str(r.content)) except Exception, e: rebot.modify(ip="") raise e
def request_del_shoptcart(self, rebot, sid): """ 删除购物车 """ base_url = "http://211.162.125.225/UserData/ShopCart.aspx" headers = { "User-Agent": rebot.user_agent, "Referer": "http://211.162.125.225/User/CommitGoods.aspx", "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) params = { "cmd": "delCartItem", "id": sid, } r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) return json.loads(trans_js_str(r.content))
def request_station_status(self, line, rebot): """ 车站状态 """ base_url = "http://www.96096kp.cn/UserData/UserCmd.aspx" params = { "SchStationCode": line.s_sta_id, "SchStationName": line.s_sta_name, "cmd": "GetStationStatus", } headers = { "User-Agent": rebot.user_agent, "Referer": "http://www.96096kp.cn/TicketMain.aspx", "Origin": "http://www.96096kp.cn", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) return json.loads(trans_js_str(r.content))
def send_order_request(self, rebot, order): base_url = "http://211.162.125.225/UserData/UserCmd.aspx" params = { "BeginDate": "", "EndDate": "", "OrderNo": order.raw_order_no, "start": 0, "limit": 10, "Status": -1, "cmd": "OnlineOrderGetList", "UserGuid": rebot.user_id } headers = { "User-Agent": rebot.user_agent, "Referer": "http://211.162.125.225/User/OrderQuery.aspx", "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } def my_trans_js_str(s): for k in set(re.findall("([A-Za-z_]+):", s)): s = re.sub(r"\b%s\b" % k, '"%s"' % k, s) return s cookies = json.loads(rebot.cookies) r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) try: res = json.loads(trans_js_str(r.content)) except: res = json.loads(my_trans_js_str(r.content)) for d in res["data"]: if d["o_OrderNo"] == order.raw_order_no: return d return {}
def do_refresh_line(self, line): rebot = SzkyWebRebot.get_one() headers = {"User-Agent": rebot.user_agent} cookies = {} for i in range(20): try: res = rebot.query_code(headers) except: continue if res.get('status', '') == 0: cookies = res.get('cookies') valid_code = res.get('valid_code') break result_info = { "result_msg": "", "update_attrs": {}, } now = dte.now() if cookies: data = { "DstNode": line.d_sta_name, "OpAddress": "-1", "OpStation": "-1", "OperMode": '', "SchCode": '', "SchDate": line.drv_date, "SchTime": '', 'SeatType': '', 'StartStation': line.s_sta_id, 'WaitStationCode': line.extra_info['raw_info']['SchWaitStCode'], 'cmd': "MQCenterGetClass", 'txtImgCode': valid_code, } line_url = 'http://211.162.125.225/UserData/MQCenterSale.aspx' headers.update({ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Referer": "http://211.162.125.225/User/Default.aspx", "X-Requested-With": "XMLHttpRequest", }) try: r = rebot.http_post(line_url, data=urllib.urlencode(data), headers=headers, cookies=cookies) res = json.loads(trans_js_str(r.content)) except: result_info.update(result_msg="exception_ok", update_attrs={ "left_tickets": 5, "refresh_datetime": now }) line_log.info("%s\n%s", "".join(traceback.format_exc()), locals()) return result_info else: return self.do_refresh_line_by_app(line) update_attrs = {} try: for d in res["data"]: if d['SchStat'] == '1': drv_datetime = dte.strptime( "%s %s" % (d["SchDate"], d["orderbytime"]), "%Y-%m-%d %H:%M") line_id_args = { "s_city_name": line.s_city_name, "d_city_name": line.d_city_name, "s_sta_name": d["SchWaitStName"], "d_sta_name": d["SchNodeName"], "crawl_source": line.crawl_source, "drv_datetime": drv_datetime, } line_id = md5( "%(s_city_name)s-%(d_city_name)s-%(drv_datetime)s-%(s_sta_name)s-%(d_sta_name)s-%(crawl_source)s" % line_id_args) try: obj = Line.objects.get(line_id=line_id) except Line.DoesNotExist: continue info = { "full_price": float(d["SchStdPrice"]), "fee": 0, "left_tickets": int(d["SchTicketCount"]), "refresh_datetime": now, "extra_info": { "raw_info": d }, } if line_id == line.line_id: update_attrs = info else: if obj.left_tickets == 0: continue obj.update(**info) except: result_info.update(result_msg="exception_ok", update_attrs={ "left_tickets": 5, "refresh_datetime": now }) line_log.info("%s\n%s", "".join(traceback.format_exc()), locals()) return result_info if not update_attrs: result_info.update(result_msg="no line info", update_attrs={ "left_tickets": 0, "refresh_datetime": now }) else: result_info.update(result_msg="ok", update_attrs=update_attrs) return result_info
def check_raw_order_no(self, order): """ 有时候源站返回的订单号是错的,这时需要从源站搜出来 """ if order.status != STATUS_WAITING_ISSUE: return try: other = Order.objects.get( raw_order_no=order.raw_order_no, status__in=[STATUS_ISSUE_SUCC, STATUS_ISSUE_FAIL]) except Order.DoesNotExist: return if other.order_no == order.order_no: return rebot = order.get_lock_rebot() base_url = "http://www.96096kp.cn/UserData/UserCmd.aspx" params = { "isCheck": "false", "ValidateCode": "", "IDTypeCode": 1, "IDTypeNo": order.contact_info["id_number"], "start": 0, "limit": 10, "Status": -1, "cmd": "OnlineOrderGetList" } headers = { "User-Agent": rebot.user_agent, "Referer": "http://www.96096kp.cn/TicketMain.aspx", "Origin": "http://www.96096kp.cn", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } cookies = json.loads(rebot.cookies) r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) res = json.loads(trans_js_str(r.content)) order_list = res["data"] if order.contact_info["id_number"] != order.riders[0]["id_number"]: params = { "isCheck": "false", "ValidateCode": "", "IDTypeCode": 1, "IDTypeNo": order.riders[0]["id_number"], "start": 0, "limit": 10, "Status": -1, "cmd": "OnlineOrderGetList" } r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) res = json.loads(trans_js_str(r.content)) order_list.extend(res["data"]) for d in order_list: if d["OrderStatus"] == "未支付" and float( d["OrderMoney"]) == order.order_price and int( d["TicketCount"]) == order.ticket_amount: raw_order = d["OrderNo"] qs = Order.objects.filter(raw_order_no=raw_order) cnt = qs.count() if not cnt: old = order.raw_order_no order.modify(raw_order_no=raw_order, pay_money=float(d["OrderMoney"])) order.add_trace(OT_CHECK_RAW_ORDER, "%s=>%s" % (old, order.raw_order_no)) order_log.info("order:%s change raw_order_no %s to %s", order.order_no, old, order.raw_order_no) return elif cnt == 1: if qs.first().order_no == order.order_no: return
def send_order_request(self, rebot, order): base_url = "http://www.96096kp.cn/UserData/UserCmd.aspx" params = { "isCheck": "false", "ValidateCode": "", "IDTypeCode": 1, "IDTypeNo": order.contact_info["id_number"], "start": 0, "limit": 10, "Status": -1, "cmd": "OnlineOrderGetList" } headers = { "User-Agent": rebot.user_agent, "Referer": "http://www.96096kp.cn/TicketMain.aspx", "Origin": "http://www.96096kp.cn", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } def my_trans_js_str(s): for k in set(re.findall("([A-Za-z]+):", s)): s = re.sub(r"\b%s\b" % k, '"%s"' % k, s) s = s.replace("\"\'\'\"", "\"\"") s = s.replace("''", "\"\"") return s cookies = json.loads(rebot.cookies) r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) if r.status_code == 403: rebot.modify(ip="") return {} try: res = json.loads(trans_js_str(r.content)) except: res = json.loads(my_trans_js_str(r.content)) for d in res["data"]: if d["OrderNo"] == order.raw_order_no: return d params = { "isCheck": "false", "ValidateCode": "", "IDTypeCode": 1, "IDTypeNo": order.riders[0]["id_number"], "start": 0, "limit": 10, "Status": -1, "cmd": "OnlineOrderGetList" } r = rebot.http_post(base_url, data=urllib.urlencode(params), headers=headers, cookies=cookies) try: res = json.loads(trans_js_str(r.content)) except: res = json.loads(my_trans_js_str(r.content)) for d in res["data"]: if d["OrderNo"] == order.raw_order_no: return d return {}