프로젝트 후기

코드를 최대한 깔끔하게 쓰기 위해 파이썬의 OOP장점을 살리고 싶었다.

하지만 클래스와 메소드를 생성하면서 솔직히 머릿속은 너무 복잡해져서 한동안 고생했던 프로젝트이다.

또한, API 사이트의 문서들이 영어로 도배되어있어 이해하는데 오래걸렸다.

매번 새로운 프로젝트를 접할 때마다 쉽지 않은거 같다.


프로젝트 설명

  1. 구글 시트에 입력된 목적지와 최저가를 참고.
City IATA Code Lowest Price
Paris 1000000
Berlin 60000
Tokyo 766000
Sydney 870000
Istanbul 150000
Kuala Lumpur 650000
New York 379000
San Francisco 400000
Cape Town 600000
  1. 비어있는 IATA를 TEQUILA  API와 Sheety API를 이용하여 채우기
City IATA Code Lowest Price
Paris PAR 1000000
Berlin BER 60000
Tokyo TYO 766000
Sydney SYD 870000
Istanbul IST 150000
Kuala Lumpur KUL 650000
New York NYC 379000
San Francisco SFO 400000
Cape Town CPT 600000
  1. TEQUILA API를 활용하여 목적지로 향하는 최저가 항공권 검색

  2. 구글 시트의 Lowest Price보다 저렴할 경우 twilio API를 활용해 문자 발송

  3. 결과 화면


메인.py

from data_manager import DataManager
from flight_search import FlightSearch
from flight_data import FlightData
from notification_manager import NotificationManager

notification_manager = NotificationManager()
data_manager = DataManager()
flight_search = FlightSearch()
# main 파일에 구글 시트 데이터 동기화
sheet_data = data_manager.get_sheet_data()

# 만약 IATA코드가 비어있다면if sheet_data[0]["iataCode"] == "" :
# flight_serach의 get_destination_code메소드로 IATA코드 가져오기for row in sheet_data :
        row["iataCode"] =  flight_search.get_destination_code(row["city"])

# main 파일의 구글 시트 내용을 data_manager의 destination_data와 동기화
    data_manager.destination_data = sheet_data
# 구글 시트에 업데이트
    data_manager.update_destination_code()

for row in sheet_data :

    try :
# TEQUILA API를 통해 가져온 값
        ticket = flight_search.search_ticket(row["iataCode"])
        price = ticket["data"][0]["price"]
        departure_iata = ticket["data"][0]["cityCodeFrom"]
        departure_city = ticket["data"][0]["cityFrom"]
        destination_city = ticket["data"][0]["cityTo"]
        destination_iata = ticket["data"][0]["cityCodeTo"]
        local_arrival = ticket["data"][0]["local_arrival"]
        local_departure = ticket["data"][0]["local_departure"]
# flight_data로 정보 전달
        flight_data = FlightData(price,departure_city,destination_city,departure_iata,destination_iata,local_arrival,local_departure)
        print(f"{flight_data.destination_city} : ${flight_data.price} won")
# 만약 구글시트의 최저가보다 검색한 가격이 싸다면if flight_data.price < row["lowestPrice"] :
# 트윌리오를 통해 메세지 발송
            notification_manager.send_sms(price,departure_city,destination_city,departure_iata,destination_iata,local_arrival,local_departure)
    except IndexError :
# 항공 티켓을 찾지 못할 경우 예외 잡기print(f"{flight_data.destination_city}로 향하는 티켓을 검색하지 못했습니다.")

구글 시트 매니저.py