module OpenDataAPI
Public Class Methods
init(api_key)
click to toggle source
# File lib/opendata-api.rb, line 11 def self.init(api_key) raise "OpenData API Key required" if api_key.empty? uri_base = URI.parse(OpenDataAPI::Constants::BASE_URL) http_base = Net::HTTP.new(uri_base.host, uri_base.port) # Store API Key as class variable OpenDataAPIRequest.set_api_key(api_key) # Store URI and HTTP base as class variables OpenDataAPIRequest.set_uri_base(uri_base) OpenDataAPIRequest.set_http_base(http_base) end
run(args)
click to toggle source
# File lib/opendata-api.rb, line 25 def self.run(args) api_requests = [] args.each do |arg| case arg[:api_name] when 'traffic_volume_counts' # Request for Traffic Volume Counts API uri_traffic_volume_counts_api = URI.parse( OpenDataAPI::Constants::TrafficVolumeCountsAPI::BASE_URL + OpenDataAPI::Constants::TrafficVolumeCountsAPI::API_ENDPOINT + OpenDataAPI::Constants::TrafficVolumeCountsAPI.query_string_params(arg[:format], arg[:table], arg[:limit]) ) request_for_traffic_volume_counts_api = { api_name: arg[:api_name], api_instance: OpenDataAPIRequest.new(OpenDataAPIRequest.http_base, uri_traffic_volume_counts_api, OpenDataAPIRequest.api_key) } api_requests << request_for_traffic_volume_counts_api when 'trip_planner' # Request for Trip Planner API uri_trip_planner_api = URI.parse( OpenDataAPI::Constants::TripPlannerAPI::BASE_URL + OpenDataAPI::Constants::TripPlannerAPI::API_ENDPOINT + OpenDataAPI::Constants::TripPlannerAPI.query_string_params(arg[:format], arg[:coord_lat], arg[:coord_long], arg[:coord_radius]) ) request_for_trip_planner_api = { api_name: arg[:api_name], api_instance: OpenDataAPIRequest.new(OpenDataAPIRequest.http_base, uri_trip_planner_api, OpenDataAPIRequest.api_key) } api_requests << request_for_trip_planner_api else raise ArgumentError.new("Invalid API Name") end end begin # Start HTTP(S) Session to re-use across multiple requests Net::HTTP.start(OpenDataAPIRequest.uri_base.hostname, OpenDataAPIRequest.uri_base.port, :use_ssl => OpenDataAPIRequest.uri_base.scheme == 'https') do |http_session| puts http_session.use_ssl? ? "OpenData API HTTPS Session" : "OpenData API HTTP Session" http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE http_session.read_timeout = OpenDataAPI::Constants::READ_TIMEOUT response = {} # Request #1 to each API (i.e. Traffic Volume Counts API, Trip Planner API, etc) api_requests.each do |request| _res = request[:api_instance].fetch(http_session, request[:api_instance].request, OpenDataAPI::Constants::REQUEST_LIMIT) # puts JSON.pretty_generate(JSON.parse(_res.body)) response[request[:api_name].to_sym] = _res.body end response end rescue Exception => e raise "Exception opening TCP connection: #{e}" end end