Exemplo n.º 1
0
class App:
    def __init__(self):
        self.ui = UI()
        self.flight_data_manager = FlightDataManager()
        self.spreadsheet_data_manager = SpreadsheetDataManager(
            self.flight_data_manager)
        self.notification_manager = NotificationManager()
        self.flight_search = FlightSearch(self.spreadsheet_data_manager,
                                          self.flight_data_manager,
                                          self.notification_manager)

    # PUBLIC METHODS
    def start(self):
        self.flight_search.check_flights()
Exemplo n.º 2
0
from notification_manager import NotificationManager
from pprint import pprint

data_manager = DataManager()
sheet_data = data_manager.get_destination_data()
flight_search = FlightSearch()
notification_manager = NotificationManager()

ORIGIN_CITY_IATA = "YYZ"

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))
pprint(sheet_data)
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:
        if int(flight.price)< int(destination['lowestPrice']):
            notification_manager.notify(flight)

Exemplo n.º 3
0
destinations = {
    data["iataCode"]: {
        "id": data["id"],
        "city": data["city"],
        "price": data["lowestPrice"]
    }
    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_CODE,
                                         destination_code,
                                         from_time=tomorrow,
                                         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 " \
Exemplo n.º 4
0
    data_manager.city_codes = flight_search.get_destination_codes(city_names)
    data_manager.update_destination_codes()
    sheet_data = data_manager.get_destination_data()

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

for destination_code in sheet_data:
    flight = flight_search.check_flights(ORIGIN_CITY_IATA,
                                         destination_code,
                                         from_time=tomorrow,
                                         to_time=six_month_window)

    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}."
Exemplo n.º 5
0
# Change the timedelta's to be in the range you want
date_from = (datetime.now() + timedelta(days=1)).strftime(
    '%d/%m/%Y')  # starting date, currently set to tomorrow
date_to = (datetime.now() + timedelta(days=180)).strftime(
    '%d/%m/%Y')  # end date, currently set to 6 months from today

flight_search = FlightSearch()
data_manager = DataManager()
notification_manager = NotificationManager()

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)
    try:
        if city['lowestPrice'] > flight_data.price:
            print(
                f'{flight_data.destination_city} new deal is lower: {flight_data.price}'
            )
            notification_manager.send_alert(flight_data)
    except AttributeError:
        pass  # can print an error message here if wanted - it comes up if there is nothing to compare with no flights
print('Done')
# The program does not always have an output, so may want to print more lines for debugging, but I commented them out
# for less clutter. At this stage, I thought just this one statement would be fine, but add back in if needed or wanted
Exemplo n.º 6
0
from notification_manager import NotificationManager
from datetime import datetime, timedelta

data_manager = DataManager()
sheet_data = data_manager.get_destination_data()
flight_search = FlightSearch()
notification_manager = NotificationManager()

origin_city_iata = "ORD"

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_now = 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_now
    )

    if flight.price < destination["lowestPrice"]:
        notification_manager.send_sms(
            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.depart_date} to {flight.return_date}."
        )
Exemplo n.º 7
0
    datamgr.destination_data = sheet_data
    datamgr.update_destination_codes()

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

for destination_code in destinations:
    flight = flight_search.check_flights(
        origin_airport=ORIGIN_CITY_IATA,
        departure_airport_code=destination_code,
        from_time=tomorrow,
        to_time=six_months)
    if flight is None:
        continue
    if flight.price < destinations[destination_code]["price"]:
        users = datamgr.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 New York-{ORIGIN_CITY_IATA} to {flight.departure_city}-{flight.departure_airport_code}, 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.departure_airport_code}.{flight.out_date}*{flight.departure_airport_code}.{flight.origin_airport}.{flight.return_date}"
Exemplo n.º 8
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.º 9
0
ORIGIN_CITY_IATA = "LON"

data_manager = DataManager()
sheet_data = data_manager.get_destination_data()
notification_manager = NotificationManager()

if sheet_data[0]["iataCode"] == "":
    from flight_search import FlightSearch
    for row in sheet_data:
        print(row)
        row["iataCode"] = FlightSearch.get_distination_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:
    destination_code = destination["iataCode"]
    flight = FlightSearch.check_flights(origin_city_code=ORIGIN_CITY_IATA,
                                        destination_city_code=destination_code,
                                        from_time=tomorrow,
                                        to_time=six_month_from_today)

    if flight.price < destination['lowerPrice']:
        notification_manager.send_sms(
            message=
            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}.")
Exemplo n.º 10
0
flight_search = FlightSearch()

if sheety_data[0]['iataCode'] == '':
    for city in sheety_data:
        iata_code = flight_search.get_iata_codes(city['city'])
        city['iataCode'] = iata_code
    sheety_data_manager.update_iata_codes()

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

message = ''
for city_data in sheety_data:
    flights = flight_search.check_flights(from_city=ORIGIN_CITY,
                                          to_city=city_data['iataCode'],
                                          from_date=tomorrow,
                                          to_date=six_month_from_today)
    if flights is None:
        continue
    if flights.price < city_data['lowestPrice']:
        message += f'Cheap Flight Alert...\nFrom {flights.origin_city}-{flights.origin_airport} ---> ' \
                  f'{flights.destination_city}-{flights.destination_airport} just for {flights.price} EURO\n\n'

if message != '':
    NotificationManager().send_sms_to_me(message)
    for users in sheety_users:
        message_for_users = f"Subject:Cheap Deals Awaiting\n\nDear {users['firstName']} {users['lastName']}, there are some deals " \
                  f"found.\n{message}"
        NotificationManager().send_message_to_users(users['email'],
                                                    message_for_users)
Exemplo n.º 11
0
#Sheety
data_manager.get_destination_data()
data_manager.update_destination_codes()

sheets_data = data_manager.get_destination_data()
print(sheets_data)

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

for city in sheets_data:
    destination_code = city['iataCode']
    flight = flight_search.check_flights(
        origin_city_code=ORIGIN_CITY,
        destination_city_code=destination_code,
        from_time=today,
        to_time=six_month_from_today)
    if flight is not None:
        print(flight.destination_city)
        print(flight.origin_city)
        print(flight.price)
        print(flight.out_date)
        print(flight.return_date)
        print(f"{flight.destination_city} : €{flight.price}")
        if flight.price < city['lowestPrice']:
            print("Cheaper flight found")
            template = f"✈️ New cheap return flight for {flight.origin_city} to {flight.destination_city} found.\nLow price at only €{flight.price}\nCheck {str(flight.out_date)} to {str(flight.return_date)} on https://cwavedave.com/cheap-flights/"
            with smtplib.SMTP("smtp.gmail.com") as connection:
                connection.starttls()
                connection.login(user=my_email, password=password)
Exemplo n.º 12
0
sheet_data = data_mananager.get_sheet_data()

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

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

for destination in sheet_data:
    flight = flight_search.check_flights(
        ORIGIN_CITY_IATA,
        destination['iataCode'],
        tomorrow,
        six_months_from_now
    )

    if flight is None:
        continue

    if flight.price < destination['lowestPrice']:

        users = data_mananager.get_customer_emails()
        emails = [row['email'] for row in users]

        message = f"Low price alert! Only €{flight.price} " \
                f"to fly from {flight.origin_city}-{flight.origin_airport} " \
                f"to {flight.destination_city}-{flight.destination_airport}, " \
                f"from {flight.departure_date} to {flight.return_date}."
Exemplo n.º 13
0
sheet_data = data_manager.get_destination_data()

flight_search = FlightSearch()
notification_manager = NotificationManager()

ORIGIN_CITY = 'YYC'

# Check for missing IATA codes & fill missing items
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))

# Check destinations for new low prices
for destination in sheet_data:
    flight = flight_search.check_flights(
        city=ORIGIN_CITY,
        destination=destination['iataCode'],
        from_time=tomorrow,
        to_time=six_month_from_today,
    )
    if flight.price < destination['lowestPrice']:
        notification_manager.send_sms(
            message=
            f"Low price alert! Only ${flight.price} to fly from {flight.origin_city}:{flight.origin_airport} -> {flight.destination_city}: {flight.destination_airport}, from {flight.out_date} to {flight.return_date}"
        )
Exemplo n.º 14
0
#This file will need to use the DataManager,FlightSearch, FlightData, NotificationManager classes to achieve the program requirements.
import datetime as dt
from data_manager import DataManager
from flight_search import FlightSearch

data_manager = DataManager()
flight_search = FlightSearch()

sheet_data = data_manager.destination_data()

ORIGIN_CITY_CODE = 'LON'

for data in sheet_data:
    if data['iataCode'] == '':
        data['iataCode'] = flight_search.destination_code(data['city'])
        data_manager.update_data(data['iataCode'], data['id'])

today = dt.datetime.now()
tomorrow_date = today + dt.timedelta(days=1)
sixmonths_date = today + dt.timedelta(days=6 * 30)

for data in sheet_data:
    flight_search.check_flights(ORIGIN_CITY_CODE,
                                data["iataCode"],
                                from_time=tomorrow_date,
                                to_time=sixmonths_date)