SXXXXXXX_FlightMonitor/debug_opensky.py
2025-06-13 07:42:31 +02:00

91 lines
4.0 KiB
Python

# debug_opensky.py
import time
from datetime import datetime, timezone, timedelta
from opensky_api import OpenSkyApi
import requests # Importiamo la libreria requests
import json
def run_historical_test():
"""
Performs an isolated test of the OpenSky Network historical API call,
first with a direct HTTP request, then with the library.
"""
print("--- OpenSky Historical API Debug Script (Direct + Library) ---")
# 1. Definisci i parametri ESATTI del test
bbox_to_test = {
"lamin": 44.986,
"lomin": 7.9341,
"lamax": 46.9567,
"lomax": 10.5997,
}
now_utc = datetime.now(timezone.utc)
timestamp_to_test = int((now_utc - timedelta(hours=2)).timestamp())
# URL dell'endpoint REST per i dati storici
# Nota: NON usiamo l'autenticazione per questo test, per replicare il comportamento anonimo
opensky_url = f"https://opensky-network.org/api/states/all?time={timestamp_to_test}&lamin={bbox_to_test['lamin']}&lomin={bbox_to_test['lomin']}&lamax={bbox_to_test['lamax']}&lomax={bbox_to_test['lomax']}"
print("1. Parameters for the test:")
print(f" - Bounding Box: {bbox_to_test}")
print(f" - Timestamp UTC (2 hours ago): {timestamp_to_test}")
print(f" - Direct API URL to be called: {opensky_url}\n")
# --- TEST 1: Chiamata HTTP Diretta ---
print("--- Test 1: Direct HTTP Request using 'requests' ---")
try:
print("2. Making direct HTTP GET request...")
response = requests.get(opensky_url, timeout=15)
print(f" - Request completed. HTTP Status Code: {response.status_code}")
# Controlla se la richiesta ha avuto successo (codice 2xx)
if response.ok:
# Prova a decodificare la risposta JSON
try:
data = response.json()
print(" - Response content is valid JSON.")
# Analizza il contenuto del JSON
if data and "states" in data:
if data["states"]:
num_flights = len(data["states"])
print(f" - SUCCESS: Found {num_flights} flight states in the direct response!")
else:
print(" - WARNING: Direct response contains an empty 'states' list. No flights found for this time/area.")
else:
print(" - WARNING: Direct response JSON does not contain a 'states' key or is empty.")
print(f" Raw JSON content: {data}")
except json.JSONDecodeError:
print(" - FAILURE: The server responded with OK, but the content is NOT valid JSON.")
print(f" Raw content (first 200 chars): {response.text[:200]}")
else:
print(f" - FAILURE: The server responded with an error status code.")
print(f" Response content: {response.text}")
except requests.exceptions.RequestException as e:
print(f"\n --- AN EXCEPTION OCCURRED DURING THE DIRECT HTTP CALL ---")
print(f" Error Type: {type(e).__name__}")
print(f" Error Details: {e}")
# --- TEST 2: Chiamata tramite Libreria (per confronto) ---
print("\n--- Test 2: Library Call using 'opensky-api' (for comparison) ---")
try:
api = OpenSkyApi()
bbox_tuple = (bbox_to_test['lamin'], bbox_to_test['lamax'], bbox_to_test['lomin'], bbox_to_test['lomax'])
states_response = api.get_states(time_secs=timestamp_to_test, bbox=bbox_tuple)
if states_response:
if states_response.states:
print(f" - SUCCESS (Library): Found {len(states_response.states)} flights.")
else:
print(" - WARNING (Library): Responded but 'states' list is empty.")
else:
print(" - FAILURE (Library): The API call returned a None object.")
except Exception as e:
print(f" - EXCEPTION (Library): {e}")
if __name__ == "__main__":
run_historical_test()