Beispiel #1
0
def retrieve_destinations(origin, budget_query, departure_date, duration):
    # Query for flights via Amadeus
    flights = Flights(AMADEUS_API_KEY)

    # Find flights from origin
    origin_iata = flights.auto_complete(term=origin)[0]['value']

    r = flights.inspiration_search(origin=origin_iata,
                                   departure_date=departure_date,
                                   max_price=budget_query,
                                   duration=duration)

    # Cap number of experiences
    results = r['results'][:NUM_EXPERIENCES]

    # Map IATA codes from Amadeus API to human-readable places
    destinations = []
    for iata in results:
        destination = IATA2CITY.get(iata['destination'], None)
        if destination is not None:
            # Return a tuple of HRF city, dates, and price of flight
            destinations.append((destination, origin_iata, iata['destination'],
                                 iata['departure_date'], iata['return_date'],
                                 float(iata['price'])))
    return destinations
def GenerateListsFromCity(ciudadElegidaUsuario, primerDiaPosibleSalida,
                          ultimoDiaPosibleSalida, duracion, currencyByUser):
    # importamos los modulos necesarios de amadeus y le pasamos la pw
    from amadeus import Flights
    flights = Flights('fdNSGaHphktgPWytHqHqBVhcQVVs4uVr')
    from amadeus import Hotels
    hotels = Hotels('fdNSGaHphktgPWytHqHqBVhcQVVs4uVr')

    #aseguramos que las fechas van con guiones
    primerDiaPosibleSalida_Corregido = primerDiaPosibleSalida.replace("/", "-")
    ultimoDiaPosibleSalida_Corregido = ultimoDiaPosibleSalida.replace("/", "-")

    #calculo fecha regreso  <- de momento no se emplea
    primerDiaPosibleSalida_datetime = datetime.datetime.strptime(
        primerDiaPosibleSalida, '%Y-%m-%d')
    primerDiaPosibleVuelta_datetime = primerDiaPosibleSalida_datetime + datetime.timedelta(
        days=duracion)
    primerDiaPosibleVuelta = (str(primerDiaPosibleVuelta_datetime)[:10])

    ultimoDiaPosibleSalida_datetime = datetime.datetime.strptime(
        ultimoDiaPosibleSalida, '%Y-%m-%d')
    ultimoDiaPosibleVuelta_datetime = ultimoDiaPosibleSalida_datetime + datetime.timedelta(
        days=duracion)
    ultimoDiaPosibleVuelta = (str(ultimoDiaPosibleVuelta_datetime)[:10])

    #Obtener codigo ciudad salida
    respCity = flights.auto_complete(term=ciudadElegidaUsuario)
    print(respCity)
    codigoCiudadSalida = respCity[0]['value']
    print("Buscando vuelos desde", codigoCiudadSalida)

    # Buscar vuelos
    flights = Flights('fdNSGaHphktgPWytHqHqBVhcQVVs4uVr')
    respVuelos = flights.inspiration_search(
        origin=codigoCiudadSalida,
        departure_date=primerDiaPosibleSalida_Corregido + "--" +
        ultimoDiaPosibleSalida_Corregido,
        duration=6,
        max_price=200)
    print(respVuelos)

    # Generar listas con resultados
    listadoDestinosNfila = []
    listadoDestinosLargo = []
    listadoDestinosCodigo = []
    listadoDestinosFechaSalida = []
    listadoDestinosFechaVuelta = []
    listadoDestinosPrecioVuelo = []
    listadoDestinosLats = []
    listadoDestinosLons = []
    listadoDestinosPais = []
    listadoDestinosPrecioHoteles = []

    #for i in range (len(respVuelos['results'])):
    #    print(RecuperarNumeroFromIataCode(respVuelos['results'][i]['destination']),respVuelos['results'][i]['destination'],respVuelos['results'][i]['price'])

    for i in range(len(respVuelos['results'])):
        print(i)
        posicionEnListas = RecuperarNumeroFromIataCode(
            respVuelos['results'][i]['destination'])
        listadoDestinosNfila.append(posicionEnListas)
        listadoDestinosLargo.append(
            listaMunicipalityAirports[posicionEnListas])
        listadoDestinosCodigo.append(respVuelos['results'][i]['destination'])
        listadoDestinosFechaSalida.append(
            respVuelos['results'][i]['departure_date'])
        listadoDestinosFechaVuelta.append(
            respVuelos['results'][i]['return_date'])
        listadoDestinosPrecioVuelo.append(respVuelos['results'][i]['price'])
        listadoDestinosLats.append(listaLatsAirports[posicionEnListas])
        listadoDestinosLons.append(listaLongsAirports[posicionEnListas])
        listadoDestinosPais.append(listaCountryAirports[posicionEnListas])

        #print("inciando busqueda hotel cerca de",listaLatsAirports[posicionEnListas],",",listaLongsAirports[posicionEnListas] )
        respHoteles = hotels.search_circle(
            check_in=respVuelos['results'][i]['departure_date'],
            check_out=respVuelos['results'][i]['return_date'],
            latitude=float(listaLatsAirports[posicionEnListas]),
            longitude=float(listaLongsAirports[posicionEnListas]),
            currency=currencyByUser,
            radius=30)  #km from coordenates=km from airport
        #print(respHoteles)
        precioMedioHoteles = 0
        numeroHotelesConsiderar = min(
            len(respHoteles['results']),
            5)  #max number of hotels to consider in mean price
        if numeroHotelesConsiderar == 0:
            precioMedioHoteles = 1000 * duracion
        else:
            for h in range(numeroHotelesConsiderar):
                precioDeCadaHotel = respHoteles['results'][h]['total_price'][
                    'amount']
                #        print(precioDeCadaHotel)
                #        print(respHoteles['results'][h]['location']['latitude'])
                #        print(respHoteles['results'][h]['location']['longitude'])
                precioMedioHoteles = precioMedioHoteles + float(
                    precioDeCadaHotel)
            precioMedioHoteles = round(
                precioMedioHoteles / numeroHotelesConsiderar, 2)
        listadoDestinosPrecioHoteles.append(precioMedioHoteles)

    return (listadoDestinosNfila, listadoDestinosLargo, listadoDestinosCodigo,
            listadoDestinosFechaSalida, listadoDestinosFechaVuelta,
            listadoDestinosPrecioVuelo, listadoDestinosLats,
            listadoDestinosLons, listadoDestinosPais,
            listadoDestinosPrecioHoteles)