Skip to content

Instantly share code, notes, and snippets.

@bloudermilk
Created March 30, 2016 20:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bloudermilk/87d4638e649a54467b4447f71b0584f0 to your computer and use it in GitHub Desktop.
Save bloudermilk/87d4638e649a54467b4447f71b0584f0 to your computer and use it in GitHub Desktop.
require "csv"
require "net/http"
require "json"
require "pry"
class String
def super_strip
gsub(/(^\W+|\W+$)/, "")
end
end
HEADER = ["name", "formatted_address", "rating", "place_id", "icon", "id"]
Net::HTTP.start("maps.googleapis.com", 443, use_ssl: true) do |http|
CSV.open("/Users/bloudermilk/Desktop/ratebeer-outeput.csv", "wb", headers: HEADER, write_headers: true) do |out|
CSV.foreach("/Users/bloudermilk/Desktop/ratebeer-best-brewers.csv", headers: true).map do |row|
brewer = row["brewer"]
next unless brewer
brewer = brewer.super_strip
location = row.values_at("city", "state", "country").compact.map(&:super_strip).reject { |v| v == "-" || v.empty? }.join(", ")
query = "%s in %s" % [brewer, location]
puts "Searching for #{query}"
uri = URI("https://maps.googleapis.com/maps/api/place/textsearch/json")
uri.query = URI.encode_www_form(query: query, key: "AIzaSyBU0SZ8HXYGLKQnrzjEwIFt56TeyUYC9vI")
request = Net::HTTP::Get.new(uri)
response = http.request(request)
if response.is_a?(Net::HTTPSuccess)
json = JSON.parse(response.body)
if json["status"] == "OK"
if json["results"].length == 1
result = json["results"].first
out << result.values_at(*HEADER)
else
puts "Too many results"
end
else
puts "Failed with status #{json["status"]}"
end
else
puts "HTTP error: #{response}"
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment