Cookie Consent by Free Privacy Policy Generator Aktuallisiere deine Cookie Einstellungen 📌 Tracking Celebrity Flights in Python!


📚 Tracking Celebrity Flights in Python!


💡 Newskategorie: Programmierung
🔗 Quelle: dev.to

Hello, everyone!

In this basic tutorial, I will be demonstrating how to develop a flight tracking program in Python. Let's go!

How to Create a Flight Tracking Program in Python

This program will fetch real-time flight data from the Aviationstack API and track aircraft using their ICAO24 identification. I'll cover everything from setting up your environment to implementing the program, as this is a beginner-friendly tutorial. The complete code is available at Horus on GitHub, so feel free to leave a star or contribute in other ways.

Prerequisites

Before we start, ensure you have the following:

  • Basic Python Knowledge: Understanding of basic Python programming concepts.
  • Python Itself: Python installed on your machine.
  • Required Libraries: Requests and Colorama libraries for handling API requests, parsing data, and styling console output respectively.

Setting Up the Environment

Python Installation

Download and install Python from the official Python website.

Installing Required Libraries

Install the necessary Python libraries using pip:

pip install requests colorama

Understanding APIs

What is an API?

An API allows applications (like this one!) to communicate with external services/websites. In this case, we'll be using the Aviationstack and OpenSky APIs to fetch flight data.

Flight Tracking API Options

There are several APIs available for flight data. In this tutorial, we will use:

  • Aviationstack API: For real-time flight data.
  • OpenSky Network API: For tracking aircraft using their ICAO24 identification.

API Key Registration

Register on the Aviationstack website to get your API key. OpenSky doesn't require a key for its free API.

Fetching Flight Data

We will use the requests library to make API calls and fetch flight data.

Implementing the Flight Tracking Program

Below are snippets of the key parts of the flight tracking program. For the complete code, refer to the Horus GitHub repository.

Formatting Templates

I have made output formatting templates using Colorama already (optimized for terminal use). Here they are for your convenience, they will be used throughout the code:

from colorama import Fore # For text colour.

# Config (Prints).
text = (f"{Fore.WHITE}") # Change the colour of text output in the client side
dividers = (f"{Fore.LIGHTRED_EX}") # Changes the [], | and : in the client side
success = (f"{Fore.WHITE}[{Fore.GREEN}SUCCESS{Fore.WHITE}]") # Success output.
successfully = (f"{Fore.WHITE}[{Fore.GREEN}SUCCESSFULLY{Fore.WHITE}]") # Successfully output.
failed = (f"{Fore.WHITE}[{Fore.LIGHTRED_EX}FAILED{Fore.WHITE}]") # Failed output.
prompt = (f"{Fore.WHITE}[{Fore.YELLOW}»{Fore.WHITE}]") # Prompt output.
notice = (f"{Fore.WHITE}[{Fore.YELLOW}!{Fore.WHITE}]") # Notice output.
question =  (f"{Fore.WHITE}[{Fore.YELLOW}?{Fore.WHITE}]") # Alert output.
alert =  (f"{Fore.WHITE}[{Fore.LIGHTRED_EX}!{Fore.WHITE}]") # Alert output.
exited = (f"{Fore.WHITE}[{Fore.LIGHTRED_EX}EXITED{Fore.WHITE}]") # Execited output.
disconnected = (f"{Fore.WHITE}[{Fore.LIGHTRED_EX}DISCONNECTED{Fore.WHITE}]") # Disconnected output.
command = (f"\n[{Fore.YELLOW}>_{Fore.WHITE}]: ") # Always asks for a command on a new line.

Determining what to filter/search by

In order to allow the user to access the most applicable data to them, we should get input on what they would like to search by. This can be done by the following code:

print(f'{notice} How would you like to filter flight data? (icao24, number, date, dep_iata, arr_iata or status) ')
option = input(f'{command}').lower()

Fetching Flight Data by different methods

The Aviationstack API allows users to filter flight data results by number. We can get that URL with requests, parse the data, and make dictionary calls for each piece of data we want. Then, we can print this in a readable way and add separators for each API search result. We need to have a different section of code for each filtering method, as some responses have different JSON structures than others.

We can filter Aviationstack API's results by the following methods:

  • Flight Number
  • Date
  • Departure IATA
  • Arrival IATA
  • Flight Status
  • ICAO24 ( Aircraft specific, my personal favorite :) )

The code for each method is shown below, with an if statement initiating each section based on input from before:

Fetching Flight Data by Flight Number

if option == 'number':
    number = input(f"{question} Enter a flight number: ")
    data = requests.get(f"http://api.aviationstack.com/v1/flights?access_key={key}&flight_number={number}").json()['data']
    for i in range(0,len(data)):
        print(f"Airline Name: {data[i]['airline']['name']}")
        print(f"Flight Date: {data[i]['flight_date']}")
        print(f"Status: {data[i]['flight_status']}")
        print(f"Departure Airport: {data[i]['departure']['airport']}")
        print(f"Departure Timezone: {data[i]['departure']['timezone']}")
        print(f"Departure IATA/ICAO: {data[i]['departure']['iata']} | {data[i]['departure']['icao']}")
        print(f"Departure Terminal/Gate: {data[i]['departure']['terminal']}{data[i]['departure']['gate']}")
        print(f"Estimated Departure: {data[i]['departure']['estimated']}")
        print(f"Actual Departure: {data[i]['departure']['actual']}")
        print(f"Arrival Airport: {data[i]['arrival']['airport']}")
        print(f"Arrival Timezone: {data[i]['arrival']['timezone']}")
        print(f"Arrival IATA/ICAO: {data[i]['arrival']['iata']} | {data[i]['arrival']['icao']}")
        print(f"Arrival Terminal/Gate: {data[i]['arrival']['terminal']}{data[i]['arrival']['gate']}")
        print(f"Estimated Arrival: {data[i]['arrival']['estimated']}")
        print(f"Actual Arrival: {data[i]['arrival']['actual']}")
        print("-------------------------------------------------------------------")

Fetching Flight Data by Date

if option == 'date':
    date = input(f"{question} Enter a flight date (YYYY-MM-DD): ")
    data = requests.get(f"http://api.aviationstack.com/v1/flights?access_key={key}&date={date}").json()['data']
    for i in range(0,len(data)):
        print(f"Airline Name: {data[i]['airline']['name']}")
        print(f"Flight Date: {data[i]['flight_date']}")
        print(f"Status: {data[i]['flight_status']}")
        print(f"Departure Airport: {data[i]['departure']['airport']}")
        print(f"Departure Timezone: {data[i]['departure']['timezone']}")
        print(f"Departure IATA/ICAO: {data[i]['departure']['iata']} | {data[i]['departure']['icao']}")
        print(f"Departure Terminal/Gate: {data[i]['departure']['terminal']}{data[i]['departure']['gate']}")
        print(f"Estimated Departure: {data[i]['departure']['estimated']}")
        print(f"Actual Departure: {data[i]['departure']['actual']}")
        print(f"Arrival Airport: {data[i]['arrival']['airport']}")
        print(f"Arrival Timezone: {data[i]['arrival']['timezone']}")
        print(f"Arrival IATA/ICAO: {data[i]['arrival']['iata']} | {data[i]['arrival']['icao']}")
        print(f"Arrival Terminal/Gate: {data[i]['arrival']['terminal']}{data[i]['arrival']['gate']}")
        print(f"Estimated Arrival: {data[i]['arrival']['estimated']}")
        print(f"Actual Arrival: {data[i]['arrival']['actual']}")
        print("-------------------------------------------------------------------")

Fetching Data by Departure IATA

if option == 'dep_iata':
    dep_iata = input(f"{question} Enter a flight departure IATA: ")
    data = requests.get(f"http://api.aviationstack.com/v1/flights?access_key={key}&dep_iata={dep_iata}").json()['data']
    for i in range(0,len(data)):
        print(f"Airline Name: {data[i]['airline']['name']}")
        print(f"Flight Date: {data[i]['flight_date']}")
        print(f"Status: {data[i]['flight_status']}")
        print(f"Departure Airport: {data[i]['departure']['airport']}")
        print(f"Departure Timezone: {data[i]['departure']['timezone']}")
        print(f"Departure IATA/ICAO: {data[i]['departure']['iata']} | {data[i]['departure']['icao']}")
        print(f"Departure Terminal/Gate: {data[i]['departure']['terminal']}{data[i]['departure']['gate']}")
        print(f"Estimated Departure: {data[i]['departure']['estimated']}")
        print(f"Actual Departure: {data[i]['departure']['actual']}")
        print(f"Arrival Airport: {data[i]['arrival']['airport']}")
        print(f"Arrival Timezone: {data[i]['arrival']['timezone']}")
        print(f"Arrival IATA/ICAO: {data[i]['arrival']['iata']} | {data[i]['arrival']['icao']}")
        print(f"Arrival Terminal/Gate: {data[i]['arrival']['terminal']}{data[i]['arrival']['gate']}")
        print(f"Estimated Arrival: {data[i]['arrival']['estimated']}")
        print(f"Actual Arrival: {data[i]['arrival']['actual']}")
        print("-------------------------------------------------------------------")

Fetching Data by Arrival IATA

if option == 'arr_iata':
    arr_iata = input(f"{question} Enter a flight arrival IATA: ")
    data = requests.get(f"http://api.aviationstack.com/v1/flights?access_key={key}&arr_iata={arr_iata}").json()['data']
    for i in range(0,len(data)):
        print(f"Airline Name: {data[i]['airline']['name']}")
        print(f"Flight Date: {data[i]['flight_date']}")
        print(f"Status: {data[i]['flight_status']}")
        print(f"Departure Airport: {data[i]['departure']['airport']}")
        print(f"Departure Timezone: {data[i]['departure']['timezone']}")
        print(f"Departure IATA/ICAO: {data[i]['departure']['iata']} | {data[i]['departure']['icao']}")
        print(f"Departure Terminal/Gate: {data[i]['departure']['terminal']}{data[i]['departure']['gate']}")
        print(f"Estimated Departure: {data[i]['departure']['estimated']}")
        print(f"Actual Departure: {data[i]['departure']['actual']}")
        print(f"Arrival Airport: {data[i]['arrival']['airport']}")
        print(f"Arrival Timezone: {data[i]['arrival']['timezone']}")
        print(f"Arrival IATA/ICAO: {data[i]['arrival']['iata']} | {data[i]['arrival']['icao']}")
        print(f"Arrival Terminal/Gate: {data[i]['arrival']['terminal']}{data[i]['arrival']['gate']}")
        print(f"Estimated Arrival: {data[i]['arrival']['estimated']}")
        print(f"Actual Arrival: {data[i]['arrival']['actual']}")
        print("-------------------------------------------------------------------")

Fetching Flight Data by Flight Status

if option == 'status':
    status = input(f"{question} Enter a flight status (scheduled, active, landed, cancelled, incident, diverted): ")
    data = requests.get(f"http://api.aviationstack.com/v1/flights?access_key={key}&status={status}").json()['data']
    for i in range(0,len(data)):
        print(f"Airline Name: {data[i]['airline']['name']}")
        print(f"Flight Date: {data[i]['flight_date']}")
        print(f"Status: {data[i]['flight_status']}")
        print(f"Departure Airport: {data[i]['departure']['airport']}")
        print(f"Departure Timezone: {data[i]['departure']['timezone']}")
        print(f"Departure IATA/ICAO: {data[i]['departure']['iata']} | {data[i]['departure']['icao']}")
        print(f"Departure Terminal/Gate: {data[i]['departure']['terminal']}{data[i]['departure']['gate']}")
        print(f"Estimated Departure: {data[i]['departure']['estimated']}")
        print(f"Actual Departure: {data[i]['departure']['actual']}")
        print(f"Arrival Airport: {data[i]['arrival']['airport']}")
        print(f"Arrival Timezone: {data[i]['arrival']['timezone']}")
        print(f"Arrival IATA/ICAO: {data[i]['arrival']['iata']} | {data[i]['arrival']['icao']}")
        print(f"Arrival Terminal/Gate: {data[i]['arrival']['terminal']}{data[i]['arrival']['gate']}")
        print(f"Estimated Arrival: {data[i]['arrival']['estimated']}")
        print(f"Actual Arrival: {data[i]['arrival']['actual']}")
        print("-------------------------------------------------------------------")

Fetching Flight Data by ICAO24

This method of search is quite different, as we are using the Opensky API. There is also less available data, as it relates to the specified aircraft.

if option == 'icao24':
    icao24 = input(f"{question} Enter a plane icao24: ")
    begin = input(f"{question} Enter a begin Unix timestamp for the flights interval: ")
    end = input(f"{question} Enter an end Unix timestamp for the flights interval: ")
    data = requests.get(f"https://opensky-network.org/api/flights/aircraft?icao24={icao24}&begin={begin}&end={end}").json()
    for i in range(0,len(data)):
        print(f"Aircraft Callsign: {data[i]['callsign']}")
        print(f"Departure Airport (Estimated): {data[i]['estDepartureAirport']}")
        print(f"Arrival Airport (Estimated): {data[i]['estArrivalAirport']}")
        print(f"Arrival Airport (Estimated): {data[i]['estArrivalAirport']}")
        print(f"First Seen: {data[i]['firstSeen']}")
        print(f"Last Seen: {data[i]['lastSeen']}")
        print("-------------------------------------------------------------------")

Conclusion

This feature is a part of my OSINT / digital forensics project, Horus. For the complete code to this project visit the Horus GitHub repository. You can support Horus by leaving a star!

References and Resources

...



📌 Tracking Celebrity Flights in Python!


📈 48.48 Punkte

📌 How To Find Cheap Flights With Google Flights


📈 31.93 Punkte

📌 How To Find Cheap Flights With Google Flights


📈 31.93 Punkte

📌 Faster Flights Are Coming With New Satellite Tracking Technology


📈 23.61 Punkte

📌 FAA Tracking All Boeing 737 Max Flights Around World With Satellites


📈 23.61 Punkte

📌 Scrape Google Flights with Python


📈 21.89 Punkte

📌 Guilty Plea in Celebrity Account Break-ins (May 25, 2016)


📈 18.94 Punkte

📌 Hacker thrown behind bars after stealing nude celebrity photos


📈 18.94 Punkte

📌 Hacker who stole celebrity emails, sex videos, movie scripts gets five years in prison


📈 18.94 Punkte

📌 Guilty Plea in Celebrity Account Break-ins (May 25, 2016)


📈 18.94 Punkte

📌 'Celebgate' Hacker Gets 18 Months in Prison for Hacking Celebrity Nude Photos


📈 18.94 Punkte

📌 Hacker who stole Celebrity Emails, Sex Tapes, Movie Scripts Gets 5 Years in Prison


📈 18.94 Punkte

📌 Beware of New Celebrity Sex Tape (Scam) Leaked on Facebook!


📈 18.94 Punkte

📌 Hacker thrown behind bars after stealing nude celebrity photos


📈 18.94 Punkte

📌 Hacker who stole celebrity emails, sex videos, movie scripts gets five years in prison


📈 18.94 Punkte

📌 Celebrity ‘extortion’: judge orders reality star to unlock her iPhone


📈 18.94 Punkte

📌 Creep signs plea deal for celebrity nudes hack


📈 18.94 Punkte

📌 Lil Bub, a special-needs celebrity cat, gets hacked


📈 18.94 Punkte

📌 Scammers spreading celebrity nude PDFs on Facebook, pushing malware installation


📈 18.94 Punkte

📌 'Celebgate' Hacker Gets 18 Months in Prison for Hacking Celebrity Nude Photos


📈 18.94 Punkte

📌 Hacker who stole Celebrity Emails, Sex Tapes, Movie Scripts Gets 5 Years in Prison


📈 18.94 Punkte

📌 Beware of New Celebrity Sex Tape (Scam) Leaked on Facebook!


📈 18.94 Punkte

📌 Scammers spreading celebrity nude PDFs on Facebook, pushing malware installation


📈 18.94 Punkte

📌 Searching for Leaked Celebrity Photos? Don't Blindly Click that Fappening Link!


📈 18.94 Punkte

📌 Deepfakes AI celebrity porn channel shut down by Discord


📈 18.94 Punkte

📌 AI Celebrity Porn, NSA Exploit, and Bitcoin Exchange - Paul's Security Weekly #546


📈 18.94 Punkte

📌 Bitcoin scams using celebrity images are on the rise, watchdog says


📈 18.94 Punkte

📌 YouTube subscribers getting spammed by celebrity imposters


📈 18.94 Punkte

📌 Celebrity Instagram Accounts Being Hacked to Push Scams


📈 18.94 Punkte

📌 Frappening 2017: More Celebrity Nude Photos Hacked and Leaked Online


📈 18.94 Punkte

📌 Hackers Sell Celebrity Info Obtained in Instagram Hack


📈 18.94 Punkte

📌 Fourth Fappening Hacker Admits to Stealing Celebrity Pics From iCloud Accounts


📈 18.94 Punkte











matomo