Esempio n. 1
0
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
Esempio n. 2
0
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)
Esempio n. 3
0
File: api.py Progetto: JohnABC/piao
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)
Esempio n. 4
0
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