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()
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)
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 " \
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}."
# 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
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}." )
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}"
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}' )
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}.")
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)
#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)
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}."
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}" )
#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)