Class: FaaAdip::Service
- Inherits:
-
Object
- Object
- FaaAdip::Service
- Defined in:
- lib/faa_adip/service.rb
Overview
Service to interact with FAA’s Airport Data & Information Portal (ADIP) API external-api.faa.gov/adip
This service provides access to FAA’s ADIP API, which contains information about airports, including facilities, runways, and other airport data.
Constant Summary collapse
- BASE_URL =
"https://external-api.faa.gov/adip/v1"
Instance Attribute Summary collapse
-
#client_id ⇒ Object
readonly
Returns the value of attribute client_id.
-
#client_secret ⇒ Object
readonly
Returns the value of attribute client_secret.
Instance Method Summary collapse
-
#get_airport(airport_id) ⇒ Hash
Get detailed information for a specific airport by its ID.
-
#get_facilities(airport_id) ⇒ Hash
Get facility information for a specific airport.
-
#get_metar(airport_id) ⇒ Hash
Get METAR (Meteorological Aerodrome Report) data for a specific airport.
-
#get_nearby_airports(airport_id, radius = 20, options = {}) ⇒ Hash
Get nearby airports within a specified radius.
-
#get_runway(airport_id, runway_id) ⇒ Hash
Get detailed information for a specific runway.
-
#get_runways(airport_id) ⇒ Hash
Get runway information for a specific airport.
-
#get_taf(airport_id) ⇒ Hash
Get TAF (Terminal Aerodrome Forecast) data for a specific airport.
-
#initialize(client_id = nil, client_secret = nil) ⇒ Service
constructor
Initialize the service with FAA API credentials.
-
#search_airports(options = {}) ⇒ Hash
Search for airports based on various criteria.
Constructor Details
#initialize(client_id = nil, client_secret = nil) ⇒ Service
Initialize the service with FAA API credentials
21 22 23 24 25 26 27 |
# File 'lib/faa_adip/service.rb', line 21 def initialize(client_id = nil, client_secret = nil) @client_id = client_id || ENV['FAA_ADIP_CLIENT_ID'] @client_secret = client_secret || ENV['FAA_ADIP_CLIENT_SECRET'] raise ArgumentError, "FAA ADIP client_id is required" unless @client_id raise ArgumentError, "FAA ADIP client_secret is required" unless @client_secret end |
Instance Attribute Details
#client_id ⇒ Object (readonly)
Returns the value of attribute client_id.
16 17 18 |
# File 'lib/faa_adip/service.rb', line 16 def client_id @client_id end |
#client_secret ⇒ Object (readonly)
Returns the value of attribute client_secret.
16 17 18 |
# File 'lib/faa_adip/service.rb', line 16 def client_secret @client_secret end |
Instance Method Details
#get_airport(airport_id) ⇒ Hash
Get detailed information for a specific airport by its ID
96 97 98 |
# File 'lib/faa_adip/service.rb', line 96 def get_airport(airport_id) get("/airports/#{URI.encode_www_form_component(airport_id)}") end |
#get_facilities(airport_id) ⇒ Hash
Get facility information for a specific airport
144 145 146 |
# File 'lib/faa_adip/service.rb', line 144 def get_facilities(airport_id) get("/airports/#{URI.encode_www_form_component(airport_id)}/facilities") end |
#get_metar(airport_id) ⇒ Hash
Get METAR (Meteorological Aerodrome Report) data for a specific airport
126 127 128 |
# File 'lib/faa_adip/service.rb', line 126 def (airport_id) get("/airports/#{URI.encode_www_form_component(airport_id)}/weather/metar") end |
#get_nearby_airports(airport_id, radius = 20, options = {}) ⇒ Hash
Get nearby airports within a specified radius
154 155 156 157 158 159 160 161 162 |
# File 'lib/faa_adip/service.rb', line 154 def get_nearby_airports(airport_id, radius = 20, = {}) params = { radius: validate_range(radius, 0.1, 100, 'radius') } if [:facility_use] params[:facilityUse] = validate_enum([:facility_use], %w[PUBLIC PRIVATE MILITARY], 'facility_use') end get("/airports/#{URI.encode_www_form_component(airport_id)}/nearby", params) end |
#get_runway(airport_id, runway_id) ⇒ Hash
Get detailed information for a specific runway
115 116 117 |
# File 'lib/faa_adip/service.rb', line 115 def get_runway(airport_id, runway_id) get("/airports/#{URI.encode_www_form_component(airport_id)}/runways/#{URI.encode_www_form_component(runway_id)}") end |
#get_runways(airport_id) ⇒ Hash
Get runway information for a specific airport
107 108 109 |
# File 'lib/faa_adip/service.rb', line 107 def get_runways(airport_id) get("/airports/#{URI.encode_www_form_component(airport_id)}/runways") end |
#get_taf(airport_id) ⇒ Hash
Get TAF (Terminal Aerodrome Forecast) data for a specific airport
133 134 135 |
# File 'lib/faa_adip/service.rb', line 133 def get_taf(airport_id) get("/airports/#{URI.encode_www_form_component(airport_id)}/weather/taf") end |
#search_airports(options = {}) ⇒ Hash
Search for airports based on various criteria
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/faa_adip/service.rb', line 49 def search_airports( = {}) params = {} # Map option keys to API parameter names param_mapping = { airport_id: :airportId, site_number: :siteNumber, loc_id: :locId, state: :state, city: :city, county: :county, facility_name: :facilityName, facility_use: :facilityUse, latitude: :latitude, longitude: :longitude, radius: :radius, page_size: :pageSize, page_num: :pageNum } # Process each option param_mapping.each do |option_key, param_key| if .key?(option_key) # Special validation for parameters value = case option_key when :facility_use validate_enum([option_key], %w[PUBLIC PRIVATE MILITARY], 'facility_use') when :radius validate_range([option_key], 0.1, 100, 'radius') when :page_size validate_range([option_key], 1, 100, 'page_size').to_i when :page_num validate_range([option_key], 1, nil, 'page_num').to_i else [option_key] end params[param_key] = value end end get("/airports", params) end |