Class: DarkskyRubyClient::Client
- Inherits:
-
Object
- Object
- DarkskyRubyClient::Client
- Defined in:
- lib/darksky_ruby_client/client.rb
Constant Summary collapse
- @@base_url =
'https://api.darksky.net/forecast/'
Instance Method Summary collapse
-
#base_url ⇒ Object
Don’t need this method to use until the base_url of darksky api has changed.
-
#base_url=(value) ⇒ Object
Don’t need this method to use until the base_url of darksky api has changed.
-
#init_client ⇒ Object
Init client for typhoeus.
-
#initialize(key) ⇒ Client
constructor
Initialize.
-
#run ⇒ Object
Run a request.
-
#some_weather_forecast(locations, **options) ⇒ Object
Parallel request for the forecast api.
-
#weather_forecast(lat, long, **options) ⇒ Object
Single request for the forecast api.
Constructor Details
#initialize(key) ⇒ Client
Initialize
27 28 29 30 31 |
# File 'lib/darksky_ruby_client/client.rb', line 27 def initialize(key) @secret_key = key @parallel_requests = false @responses = {} end |
Instance Method Details
#base_url ⇒ Object
Don’t need this method to use until the base_url of darksky api has changed.
16 17 18 |
# File 'lib/darksky_ruby_client/client.rb', line 16 def base_url @@base_url end |
#base_url=(value) ⇒ Object
Don’t need this method to use until the base_url of darksky api has changed.
21 22 23 |
# File 'lib/darksky_ruby_client/client.rb', line 21 def base_url=(value) @@base_url = value end |
#init_client ⇒ Object
Init client for typhoeus
164 165 166 |
# File 'lib/darksky_ruby_client/client.rb', line 164 def init_client @client = Typhoeus::Request.new(@request_url) end |
#run ⇒ Object
Run a request.
169 170 171 |
# File 'lib/darksky_ruby_client/client.rb', line 169 def run @res = @client.run end |
#some_weather_forecast(locations, **options) ⇒ Object
Parallel request for the forecast api. and must follow the specified format. {
:place_name => {
:latitude => "latitude value",
:longitude => "longitude value"
},
:place_name => {
:latitude => "latitude value",
:longitude => "longitude value"
}
} Please check darksky.net/dev/docs#forecast-request for details. exlude= e.g. exclude: “currently,flags” Exclude some number of data blocks from the API response. This is useful for reducing latency and saving cache space. The value blocks should be a comma-delimeted list (without spaces) of any of the following:
-
currently
-
minutely
-
hourly
-
daily
-
alerts
-
flags
extend= e.g. extend: “24” When present, return hour-by-hour data for the next 168 hours, instead of the next 48. When using this option, we strongly recommend enabling HTTP compression. e.g. lang: “en” Return summary properties in the desired language. (Note that units in the summary will be set according to the units parameter, so be sure to set both parameters appropriately.) Please check with darksky.net/dev/docs#forecast-request for available languages. units= e.g. units: “auto” Return weather conditions in the requested units.
- units
-
should be one of the following:
-
auto: automatically select units based on geographic location
-
ca: same as si, except that windSpeed and windGust are in kilometers per hour
-
uk2: same as si, except that nearestStormDistance and visibility are in miles,
and windSpeed and windGust in miles per hour
-
us: Imperial units (the default)
-
si: SI units
Please check with darksky.net/dev/docs#forecast-request for available SI units.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/darksky_ruby_client/client.rb', line 141 def some_weather_forecast(locations, **) @parallel_requests = true hydra = Typhoeus::Hydra.new locations.with_indifferent_access locations.each {|place_name, location| latitude = location[:latitude] if location.include?(:latitude) longitude = location[:longitude] if location.include?(:longitude) weather_forecast(latitude, longitude, ) @client.on_complete do |response| if response.code == 200 @responses[place_name] = JSON.parse(response.body) else @@logger.error("HTTP request failed: " + response.code.to_s) end end hydra.queue @client @client } hydra.run return @responses end |
#weather_forecast(lat, long, **options) ⇒ Object
Single request for the forecast api. Please check darksky.net/dev/docs#forecast-request for details. exlude= e.g. exclude: “currently,flags” Exclude some number of data blocks from the API response. This is useful for reducing latency and saving cache space. The value blocks should be a comma-delimeted list (without spaces) of any of the following:
-
currently
-
minutely
-
hourly
-
daily
-
alerts
-
flags
extend= e.g. extend: “24” When present, return hour-by-hour data for the next 168 hours, instead of the next 48. When using this option, we strongly recommend enabling HTTP compression. e.g. lang: “en” Return summary properties in the desired language. (Note that units in the summary will be set according to the units parameter, so be sure to set both parameters appropriately.) Please check with darksky.net/dev/docs#forecast-request for available languages. units= e.g. units: “auto” Return weather conditions in the requested units.
- units
-
should be one of the following:
-
auto: automatically select units based on geographic location
-
ca: same as si, except that windSpeed and windGust are in kilometers per hour
-
uk2: same as si, except that nearestStormDistance and visibility are in miles,
and windSpeed and windGust in miles per hour
-
us: Imperial units (the default)
-
si: SI units
Please check with darksky.net/dev/docs#forecast-request for available SI units.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/darksky_ruby_client/client.rb', line 70 def weather_forecast(lat, long, **) @request_url = "#{@@base_url}#{@secret_key}/#{lat},#{long}" multiple_parameters = false unless .empty? then .each {|key, value| if [:exclude, :extend, :lang, :units].include?(key) unless multiple_parameters then @request_url << '?' + key.to_s + '=' + value multiple_parameters = true else @request_url << '&' + key.to_s + '=' + value end else @@logger.warn("invalid options key \"#{key}\".") end } end init_client unless @parallel_requests run JSON.parse(@res.body) if @res.code == 200 end end |