108 lines
4.2 KiB
Python
108 lines
4.2 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()
|