Skip to content

Instantly share code, notes, and snippets.

@TheMuellenator
Forked from angelabauer/flight_data.py
Last active August 22, 2025 04:43
Show Gist options
  • Save TheMuellenator/4d730d38818d935a9ce4ad9d7a817138 to your computer and use it in GitHub Desktop.
Save TheMuellenator/4d730d38818d935a9ce4ad9d7a817138 to your computer and use it in GitHub Desktop.
class FlightData:
def __init__(self, price, origin_city, origin_airport, destination_city, destination_airport, out_date, return_date):
self.price = price
self.origin_city = origin_city
self.origin_airport = origin_airport
self.destination_city = destination_city
self.destination_airport = destination_airport
self.out_date = out_date
self.return_date = return_date
import requests
from flight_data import FlightData
TEQUILA_ENDPOINT = "https://tequila-api.kiwi.com"
TEQUILA_API_KEY = YOUR FLIGHT SEARCH API KEY
class FlightSearch:
def get_destination_code(self, city_name):
location_endpoint = f"{TEQUILA_ENDPOINT}/locations/query"
headers = {"apikey": TEQUILA_API_KEY}
query = {"term": city_name, "location_types": "city"}
response = requests.get(url=location_endpoint, headers=headers, params=query)
results = response.json()["locations"]
code = results[0]["code"]
return code
def check_flights(self, origin_city_code, destination_city_code, from_time, to_time):
headers = {"apikey": TEQUILA_API_KEY}
query = {
"fly_from": origin_city_code,
"fly_to": destination_city_code,
"date_from": from_time.strftime("%d/%m/%Y"),
"date_to": to_time.strftime("%d/%m/%Y"),
"nights_in_dst_from": 7,
"nights_in_dst_to": 28,
"one_for_city": 1,
"max_stopovers": 0,
"curr": "GBP"
}
response = requests.get(
url=f"{TEQUILA_ENDPOINT}/v2/search",
headers=headers,
params=query,
)
try:
data = response.json()["data"][0]
except IndexError:
print(f"No flights found for {destination_city_code}.")
return None
flight_data = FlightData(
price=data["price"],
origin_city=data["route"][0]["cityFrom"],
origin_airport=data["route"][0]["flyFrom"],
destination_city=data["route"][0]["cityTo"],
destination_airport=data["route"][0]["flyTo"],
out_date=data["route"][0]["local_departure"].split("T")[0],
return_date=data["route"][1]["local_departure"].split("T")[0]
)
print(f"{flight_data.destination_city}: £{flight_data.price}")
return flight_data
from datetime import datetime, timedelta
from data_manager import DataManager
from flight_search import FlightSearch
data_manager = DataManager()
sheet_data = data_manager.get_destination_data()
flight_search = FlightSearch()
ORIGIN_CITY_IATA = "LON"
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
)
@MarkoTomasevic7
Copy link

I also get error 403 for fetching flight prices (via search api), altough the part of my code that gets iata codes (via locations api) works. How can I solve this?

@weirdmo
Copy link

weirdmo commented May 12, 2024

there is no registration option in kiwi website i think they ditched free plan or am i doing something wrong? Anyone else experienced? is there an alternative?

@akashkchoudhary567
Copy link

current API "https://tequila-api.kiwi.com/v2/search" appears not to be free any longer This is the second API where I am getting the following error from some of the examples {"error_code":403,"message":"You don't have permission to access this resource"} event form the web site API that is the error I was also getting. Location to get code still worked.

Which is the second Api you are using for iata codes?

@Prithivi2807
Copy link

if i run the program through amendeus and sheety api the code is throws an error i have modified the API instead of Kiwi I used Amanda's flight files API because I'm not able to create the account in Kiwi I don't know the service will be stopped currently so if you guys have same error like me you are facing same error like me just let me know know i will attach this error and the ctepa if you add the another sheet it gives payment required error not able to complete this current project anyone facing same issues like me or some one found different api provider to build this just let me know.
Screenshot 2025-08-22 095824

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment