moji_weather/lib/moji_weather/api/rest_client.rb

58 lines
2.4 KiB
Ruby

module MojiWeather
module Api
class RestClient
def initialize(options = {})
if options[:app_code].nil?
raise MojiWeather::ClientError.new("AppCode not provided.")
end
@app_code = options[:app_code]
@cityid_base = "http://aliv18.data.moji.com/whapi/json/alicityweather"
@location_base = "http://aliv8.data.moji.com/whapi/json/aliweather"
end
private
def cityid_request(api_uri, options = {})
conn = Faraday.new do |f|
f.request :url_encoded
f.response :json
f.response :raise_error
end
begin
response = conn.post("#{@cityid_base}/#{api_uri}") do |req|
req.body = {"cityId" => options[:city_id], "token" => options[:token]}
req.headers["Authorization"] = "APPCODE #{@app_code}"
end
rescue Faraday::ClientError => e
raise MojiWeather::ClientError.new("API client error, code: #{response.status}, msg: #{response.body}")
rescue Faraday::ServerError => e
raise MojiWeather::ServerError.new("API server error, code: #{response.status}, msg: #{response.body}")
end
response.body
end
def location_request(api_uri, options = {})
conn = Faraday.new do |f|
f.request :url_encoded
f.response :json
f.response :raise_error
end
begin
response = conn.post("#{@location_base}/#{api_uri}") do |req|
req.body = {"lat" => options[:location][:lat], "lon" => options[:location][:lon], "token" => options[:token]}
req.headers["Authorization"] = "APPCODE #{@app_code}"
end
rescue Faraday::ClientError => e
raise MojiWeather::ClientError.new("API client error, code: #{response.status}, msg: #{response.body}")
rescue Faraday::ServerError => e
raise MojiWeather::ServerError.new("API server error, code: #{response.status}, msg: #{response.body}")
end
response.body
end
end
end
end