You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
720 B
31 lines
720 B
require 'json'
|
|
require 'open-uri'
|
|
require 'uri'
|
|
|
|
require_relative 'config'
|
|
|
|
Geocoder = Struct.new(:api_key) do
|
|
def self.geocode(location)
|
|
geocoder.geocode(location)
|
|
end
|
|
|
|
def self.geocoder
|
|
return @geocoder if defined?(@geocoder)
|
|
|
|
@geocoder = self.new(Forecast::Config['GOOGLE_API_KEY'])
|
|
end
|
|
|
|
def geocode(location)
|
|
url = 'https://maps.googleapis.com/maps/api/geocode/json'
|
|
query = URI.encode_www_form(address: location, api_key: api_key)
|
|
response = JSON.load(open("#{url}?#{query}"))
|
|
result = response['results'][0]
|
|
|
|
name = result['formatted_address']
|
|
location = result['geometry']['location']
|
|
lat, long = location.values_at('lat', 'lng')
|
|
|
|
[name, lat, long]
|
|
end
|
|
end
|