def select_specific_ticket(tickets, train, seat, num=1): try: seat_str = SEAT_MAP[seat] except KeyError: raise NoSuchSeat('seat[%s]' % seat) seat_str += '_num' try: ticket = next((ticket for ticket in tickets if ticket.station_train_code == train)) except StopIteration: raise NoSuchTrain('train[%s]' % train) logger.info( 'train info [%s]', '\n'.join([ '%s=%s' % (i, getattr(ticket, i)) for i in dir(ticket) if not i.startswith('_') ])) if not ticket.secretStr or ticket.canWebBuy != 'Y': raise TicketSoldOut() left = getattr(ticket, seat_str) if not left == '有' and not left.isdigit(): raise TicketSoldOut() if left.isdigit(): left_num = int(left) logger.info('letf tickets: [%d]', left_num) if left_num < num: raise TicketSoldOut('not enough') return ticket
def get_ticket(date, src, dst, train, seat, num=1, retry_times=10000): # deprecated! for i in xrange(retry_times): logger.debug('try select ticket: %d', i + 1) ticket_res = TicketResource(date, src, dst) tickets = ticket_res.process() try: ticket = select_specific_ticket(tickets, train, seat, num) return ticket except TicketSoldOut: logger.info('sold out!!') time.sleep(1) else: raise TicketSoldOut('try times[%d]' % retry_times)
def select_specific_ticket(tickets, train, seat, num=1): try: seat_str = SEAT_MAP[seat] except KeyError: raise NoSuchSeat('seat[%s]' % seat) seat_str += '_num' try: ticket = next((ticket for ticket in tickets if ticket.station_train_code == train)) except StopIteration: raise NoSuchTrain('train[%s]' % train) logger.info('train info [%s]', '\n'.join(['%s=%s' % (i, getattr(ticket, i)) for i in dir(ticket) if not i.startswith('_')])) if not ticket.secretStr or ticket.canWebBuy != 'Y': raise TicketSoldOut() left = getattr(ticket, seat_str) if not left == '有' and not left.isdigit(): raise TicketSoldOut() if left.isdigit(): left_num = int(left) logger.info('letf tickets: [%d]', left_num) if left_num < num: raise TicketSoldOut('not enough') return ticket