Exemplo n.º 1
0
def main():
    data_manager = DataManager()
    sheet_data = data_manager.read_data()
    flight_search = FlightSearch()
    notification_manager = NotificationManager()

    if len(sheet_data) > 0:
        for row in sheet_data:
            if row['iataCode'] == '':
                row['iataCode'] = flight_search.search_iata(row['city'])
            data_manager.destination_data = sheet_data
            data_manager.update_data()
        sheet_data = data_manager.read_data()

    destinations = {
        data["iataCode"]: {
            "id": data["id"],
            "city": data["city"],
            "price": data["lowestPrice"]
        }
        for data in sheet_data
    }

    tomorrow = datetime.now() + timedelta(days=1)
    six_months_from_today = datetime.now() + timedelta(days=180)

    for destination in destinations:
        flight = flight_search.search_flights(ORIGIN_CITY_IATA,
                                              destination['iataCode'],
                                              from_time=tomorrow,
                                              to_time=six_months_from_today)

        if flight is None:
            continue

        if flight.price < sheet_data[destination]['price']:
            users = data_manager.get_customer_emails()
            emails = [row['email'] for row in users]
            names = [row['firstName'] for row in users]

            msg = f'Low price alert! Only £{flight.price} to fly from {flight.origin_city}-{flight.origin_airport} '
            f'to {flight.destination_city}-{flight.destination_airport}, from {flight.out_date} '
            f'to {flight.return_date}.'

            if flight['stop_overs'] > 0:
                msg += f'\nFlight has {flight["stop_overs"]} stop over, via {flight["via_city"]}'

            link = f'https://www.google.co.uk/flights?hl=en#flt={flight.origin_airport}.{flight.destination_airport}' \
                   f'.{flight.out_date}*{flight.destination_airport}.{flight.origin_airport}.{flight.return_date}'

            notification_manager.send_emails(emails, msg, link)
Exemplo n.º 2
0
def main():
    flight_search = FlightSearch()
    data_manager = DataManager()
    notification_manager = NotificationManager()
    data = data_manager.get_data()["prices"]

    # Get IATA Codes for cities in spreadsheet.
    if data[0]["iataCode"] == "":
        city_ids = [(elem["id"], elem["city"]) for elem in data]

        for elem in city_ids:
            iata = flight_search.get_iata_code_by_city(elem[1])
            body = {
                "price": {
                    "iataCode": iata,
                }
            }
            data_manager.put_data(body, elem[0])

    # Get Cheap flights from LON (London) to destinations in spread sheet.
    for destination in data:
        flight = flight_search.search_a_flight(destination["iataCode"])

        if flight is None:
            continue

        # Notify if cheap flight is found.
        if destination["lowestPrice"] > flight.price:
            message = "Low price alert!\n" \
                     f"Only {flight.price} to fly from {flight.origin_city}-{flight.origin_airport}" \
                     f" to {flight.destination_city}-{flight.destination_airport}" \
                     f" from {flight.out_date}" \
                     f" to {flight.return_date}."

            if flight.stop_overs > 0:
                message += f"\nFlight has {flight.stop_overs} stop over, via {flight.via_city}."

            # Notify me on phone
            notification_manager.send_message(message)

            #notify customers via mail
            customers = data_manager.get_users()["users"]
            notification_manager.send_emails(customers[0]["email"], flight)
Exemplo n.º 3
0
flight_data = FlightData()

for city in sheet_data:
    data = flight_data.flight_info(city["iataCode"])
    if data == "unavailable":
        print(f"{city['city']}: not available, even with stopover")
        continue
    else:
        price = data["price"]
        print(f"{city['city']}: £{price}")
    if price is not None:
        if int(price) < city["lowestPrice"]:
            routes = data['route']
            depart = routes[0]['local_arrival'].split("T")[0]
            return_flight = routes[1]['local_arrival'].split("T")[0]

            message = f"Low price alert! Only £{price} to fly from {data['cityFrom']}-{data['flyFrom']} to" \
                      f" {data['cityTo']}-{data['flyTo']}, departing {depart} and returning {return_flight}"

            stop_overs = data['stop_overs']
            if stop_overs > 0:
                via_city = data['route'][0]["cityTo"]
                message += f"\n Flight has {stop_overs} stop over, via {via_city}"

            email_messs = f"https://www.google.co.uk/flights?hl=en#flt={data['flyFrom']}.{data['flyTo']}.{depart}*{data['flyTo']}.{data['flyFrom']}.{return_flight}"

            notification = NotificationManager()
            # notification.send_message(message)

            notification.send_emails(message, email_messs)
Exemplo n.º 4
0
    }
    for data in sheet_data
}

tomorrow = datetime.now() + timedelta(days=1)
six_month_from_today = datetime.now() + timedelta(days=6 * 30)

for destination_code in destinations:
    flight = flight_search.check_flights(ORIGIN_CITY_IATA,
                                         destination_code,
                                         from_time=tomorrow,
                                         to_time=six_month_from_today)
    print(flight.price)
    if flight is None:
        continue

    if flight.price < destinations[destination_code]["price"]:

        users = data_manager.get_customer_emails()
        emails = [row["email"] for row in users]
        names = [row["firstName"] for row in users]

        message = f"Low price alert! Only £{flight.price} to fly from {flight.origin_city}-{flight.origin_airport} to {flight.destination_city}-{flight.destination_airport}, from {flight.out_date} to {flight.return_date}."

        if flight.stop_overs > 0:
            message += f"\nFlight has {flight.stop_overs} stop over, via {flight.via_city}."

        link = f"https://www.google.co.uk/flights?hl=en#flt={flight.origin_airport}.{flight.destination_airport}.{flight.out_date}*{flight.destination_airport}.{flight.origin_airport}.{flight.return_date}"

        notification_manager.send_emails(emails, message, link)
Exemplo n.º 5
0
from data_manager import DataManager
from flight_data import FlightData
from notification_manager import NotificationManager
import os

account_sid = os.environ['account_sid']
auth_token = os.environ['auth_token']
tequila_key = os.environ['tequila_key']
auth = os.environ['Authorization']
my_phone = os.environ['my_phone']
twilio_phone = os.environ['twilio_phone']

dm = DataManager()
prices = dm.get_prices()
users = dm.get_users()

# Updates the dictionary element for the appropriate IATA Code corresponding to the city column

for elem in prices:
    if elem['iataCode'] == '':
        dm.update_iata_code(elem)

for elem in prices:
    fd = FlightData()
    data = fd.get_prices(elem['iataCode'])
    if data[0] < int(elem['lowestPrice']):
        nm = NotificationManager()
        # nm.notify(data)
        for j in users:
            nm.send_emails(data, j['email'])
Exemplo n.º 6
0
                                         to_time=six_month_from_today)

    try:
        price = flight.price
    except AttributeError:
        print(f"No flights found for {destination_code['iataCode']}")
    else:
        if flight is not None and flight.price < destinations[
                destination_code]["price"]:

            users = data_manager.get_customer_emails()
            emails = [row["email"] for row in users]
            names = [row["firstName"] for row in users]

            message = f"Low Price Alert! Only £{flight.price} to fly " \
                      f"from {flight.origin_city}->{flight.origin_airport} to " \
                      f"{flight.destination_city}->{flight.destination_airport}, from {flight.out_date} to " \
                      f"{flight.return_date}.\nAirline Name --> {flight.airline_name} " \
                      f"& \nOperating Carrier --> {flight.operating_carrier}"

            if flight.stop_overs > 0:
                message += f"\nFlight has {flight.stop_overs} stop over, via {flight.via_city}."

            link = f"https://www.google.co.uk/flights?hl=en#flt={flight.origin_airport}.{flight.destination_airport}." \
                   f"{flight.out_date}*{flight.destination_airport}.{flight.origin_airport}.{flight.return_date}"

            notification_manager.send_sms(message)
            notification_manager.send_emails(emails=emails,
                                             message=message,
                                             google_flight_link=link)
Exemplo n.º 7
0
ORIGIN_CITY_IATA = "LAX"

if sheet_data[0]["iataCode"] == "":
    for row in sheet_data:
        row["iataCode"] = flight_search.get_destination_code(row["city"])
    data_manager.destination_data = sheet_data
    data_manager.update_destination_codes()

tomorrow = datetime.now() + timedelta(days=1)
six_month_from_today = datetime.now() + timedelta(days=(6 * 30))

for destination in sheet_data:
    flight = flight_search.check_flights(
        ORIGIN_CITY_IATA,
        destination["iataCode"],
        from_time=tomorrow,
        to_time=six_month_from_today
        )

    if flight is None:
        continue

    if flight.price < destination["lowestPrice"]:
        message = f"Low price alert! Only ${flight.price} to fly from {flight.origin_city}-{flight.origin_airport} to {flight.destination_city}-{flight.destination_airport}, from {flight.out_date} to {flight.return_date}."
        if flight.stop_overs > 0:
            message += f"\nFlight has {flight.stop_overs} stop over, via {flight.via_city}."
        print(message)
        notification_manager.send_sms(message)
        user_list = data_manager.get_users()
        notification_manager.send_emails(message, user_list)
Exemplo n.º 8
0
KIWI_PARAMS_FLIGHT = {
    "fly_from": "LON",
    "fly_to": "",
    "curr": "GBP",
    "dateFrom": tomorrow.strftime("%d/%m/%Y"),
    "dateTo": six_month_later.strftime("%d/%m/%Y"),
    "nights_in_dst_from": 5,
    "nights_in_dst_to": 7,
    "price_to": "",
    "max_stopovers": 0,
    "limit": 1
}

#notify user by msg
msg_body= ''
for item in sheety_data["prices"]:
    KIWI_PARAMS_FLIGHT["fly_to"] = item["iataCode"]
    KIWI_PARAMS_FLIGHT["price_to"] = item["lowestPrice"]
    kiwi_data = flight_search.get_cheapest_flight(params=KIWI_PARAMS_FLIGHT)
    flight_data = FlightData(kiwi_data, from_city="London", from_code="LCY")
    formatted_msg = flight_data.get_formatted_data(to_city=item["city"], to_city_code=item["iataCode"])
    if formatted_msg is not None:
        msg_body += f'{formatted_msg}\n'


notification_manager = NotificationManager(msg_sid=TWILIO_SID, msg_token=TWILIO_TOKEN, smtp_connection="smtp.gmail.com",
                                           smtp_email="*****@*****.**", email_password="******")

email_list = notification_manager.get_email_list(endpoint=SHEETY_USERS_ENDPOINT, header=SHEETY_HEADER)
notification_manager.send_emails(emails_list=email_list, content=msg_body)
Exemplo n.º 9
0
sheet_data = data_manager.retrieve_data(False)  # Change to True to use an API call - only 200 a month though
data_manager.update_destination_code(sheet_data)

for city in sheet_data:
    fly_to = city['iataCode']
    flight_data = flight_search.check_flights(fly_from, fly_to, date_from, date_to)

    if flight_data is None:
        continue

    if flight_data.price < city['lowestPrice']:
        msg = f'Low price alert! Only ${flight_data.price} to fly from {flight_data.origin_city}-' \
              f'{flight_data.origin_airport} to {flight_data.destination_city}-{flight_data.destination_airport}, ' \
              f'from {flight_data.out_date} to {flight_data.return_date}'

        # add extra line if there is a stop over
        if flight_data.stop_overs > 0:
            msg += f"\nFlight has {flight_data.stop_overs} stop over, via {flight_data.via_city}."

        flight_link = f'https://www.google.com/flights?hl=en#flt={flight_data.origin_airport}.' \
                      f'{flight_data.destination_airport}.{flight_data.out_date}*{flight_data.destination_airport}.' \
                      f'{flight_data.origin_airport}.{flight_data.return_date}'
        msg += f'\n{flight_link}'

        users = data_manager.get_customer_emails()
        emails = [row["email"] for row in users]

        notification_manager.send_emails(emails, msg)
        # notification_manager.send_alert(msg)  # Uncomment to send texts
print('Done')
Exemplo n.º 10
0
        print("Sorry, please try again.")
        new_user_prompt()


# new_user_prompt()

### Populate the IATA Codes in Sheet. Only run if there are blank/new IATA Codes.
# for num in range(1, len(sheet_data)):
#     if sheet_data[num]["iataCode"] == "":
#         flight_search = FlightSearch()
#         data = flight_search.get_iata_code(sheet_data[num]['city'])
#         data_manager.insert_aitaCode(num, data)

## Get Price from Sheet and then Tequila, and compare.
for num in range(1, len(sheet_data)):
    flight_data = FlightData()
    code = sheet_data[num]["iataCode"]
    tequila_price = flight_data.get_price(code)
    sheet_price = sheet_data[num]["lowestPrice"]
    if sheet_price > tequila_price:
        print(f"{sheet_data[num]['city']}: {tequila_price}")
        for user_num in range(0, len(user_data)):
            receiver_email = user_data[user_num]["email"]
            notification_manager.send_emails(receiver_email, tequila_price,
                                             sheet_data[num]['city'], code,
                                             flight_data.get_date_depart(code),
                                             flight_data.get_date_return(code))
        print("no email??")
        # notification_manager.send_SMS(tequila_price, sheet_data[num]['city'],
        #     code, flight_data.get_date_depart(code), flight_data.get_date_return(code))
Exemplo n.º 11
0
    data_manager.update_destination_codes()

tomorrow = datetime.now() + timedelta(days=1)
six_month_from_today = datetime.now() + timedelta(days=(6 * 30))

for destination in sheet_data:
    flight = flight_search.check_flights(ORIGIN_CITY_IATA,
                                         destination["iataCode"],
                                         from_time=tomorrow,
                                         to_time=six_month_from_today)

    if flight is None:
        continue

    if flight.price < destination["lowestPrice"]:
        yen = "¥"
        message = f"Low price alert! Only {yen.encode('utf-8')}{flight.price} to fly from {flight.origin_city}-{flight.origin_airport} to {flight.destination_city}-{flight.destination_airport}, from {flight.out_date} to {flight.return_date}."
        if flight.stop_overs > 0:
            message += f"\nFlight has {flight.stop_overs} stop over, via {flight.via_city}."
            print(message)

        notification_manager.send_sms(message=message)

        users = data_manager.get_customer_email()

        link = f"https://www.google.co.uk/flights?hl=en#flt={flight.origin_airport}.{flight.destination_airport}.{flight.out_date}*{flight.destination_airport}.{flight.origin_airport}.{flight.return_date}"

        for user in users:
            notification_manager.send_emails(user["emails"], message, link,
                                             user["name"])
Exemplo n.º 12
0
if sheet_data[0]["iataCode"] == "":
    for row in sheet_data:
        row["iataCode"] = flight_search.get_destination_code(row["city"])
    print(f"sheet_data:\n {sheet_data}")

    data_manager.destination_data = sheet_data
    data_manager.update_destination_codes()

ORIGIN_IATA_CODE = "GRU"
tomorrow = datetime.now() + timedelta(days=1)
future = datetime.now() + timedelta(days=6 * 30)

for destination in sheet_data:
    flight = flight_search.check_flights(
        origin_city_code=ORIGIN_IATA_CODE,
        destination_city_code=destination["iataCode"],
        from_time=tomorrow,
        to_time=future)
    if flight is None:
        continue
    list_emails = [all_your_clients_emails]
    if flight.price <= destination["lowestPrice"]:
        notification_manager.send_emails(
            emails=list_emails,
            message=
            f"We found a lower price! Only £{flight.price} to book a flight from [{flight.city}-{flight.airport}] to [{flight.destination_city}-{flight.destination_airport}], from {flight.date} to {flight.return_date}.",
            flight_link=
            f'https://www.google.co.uk/flights?hl=en#flt={flight.airport}.{flight.destination_airport}.{flight.date}*{flight.destination_airport}.{flight.airport}.{flight.return_date}'
        )
Exemplo n.º 13
0
        city['iataCode'] = fs.get_city_code(city['city'])

    dm.destination_data = sheet_data
    dm.update_destination_data()

for item in sheet_data:
    flight_data = fs.search_flights(item['iataCode'])

    if flight_data is None:
        pass

    if flight_data.price < item['lowestPrice']:
        users = dm.get_client_emails()
        emails = [item['email'] for item in users]

        msg = f'Low Price alert! Only £{flight_data.price} to fly from ' \
              f'{flight_data.departure_city_name}-{flight_data.departure_airport} ' \
              f'to {flight_data.arrival_city_name}-{flight_data.arrival_airport}, ' \
              f'from {flight_data.outbound_date} to {flight_data.inbound_date}'

        if flight_data.stop_overs > 0:
            msg += f'\nFlight has 1 stop over, via {flight_data.via_city}.'

        link = f'link = https://www.google.co.uk/flights?hl=en#flt=' \
               f'{flight_data.departure_airport}.' \
               f'{flight_data.arrival_airport}.' \
               f'{flight_data.outbound_date}*{flight_data.arrival_airport}.' \
               f'{flight_data.inbound_date}.{flight_data.departure_airport}'

        notification_mng.send_emails(emails=emails, message=msg, link=link)