38 lines
985 B
Ruby
38 lines
985 B
Ruby
|
# app/services/weather_service.rb
|
||
|
class WeatherService
|
||
|
include HTTParty
|
||
|
base_uri Rails.application.credentials.qweather.uri
|
||
|
|
||
|
def initialize
|
||
|
@api_key = Rails.application.credentials.qweather.token
|
||
|
end
|
||
|
|
||
|
def get_weather(latitude, longitude)
|
||
|
Rails.logger.debug "Get Weather for #{latitude},#{longitude}"
|
||
|
response = self.class.get(
|
||
|
"/weather/now",
|
||
|
headers: {
|
||
|
"X-QW-Api-Key" => "#{@api_key}"
|
||
|
},
|
||
|
query: {
|
||
|
location: "#{longitude},#{latitude}"
|
||
|
})
|
||
|
|
||
|
return nil unless response.success?
|
||
|
|
||
|
data = response["now"]
|
||
|
{
|
||
|
temperature: data["temp"].to_f,
|
||
|
feeling_temp: data["feelsLike"].to_f,
|
||
|
humidity: data["humidity"].to_f,
|
||
|
wind_scale: "#{data['windScale']}级",
|
||
|
wind_speed: data["windSpeed"].to_f,
|
||
|
precipitation: data["precip"].to_f,
|
||
|
pressure: data["pressure"].to_f,
|
||
|
visibility: data["vis"].to_f,
|
||
|
cloud: data["cloud"].to_f,
|
||
|
description: data["text"]
|
||
|
}
|
||
|
end
|
||
|
end
|