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)
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)
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)
} 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)
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'])
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)
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)
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)
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')
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))
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"])
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}' )
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)