Skip to content

Instantly share code, notes, and snippets.

@chrismetcalf
Created August 2, 2012 00:03
Show Gist options
  • Save chrismetcalf/3231716 to your computer and use it in GitHub Desktop.
Save chrismetcalf/3231716 to your computer and use it in GitHub Desktop.
Sample code for the Kentucky Ruby User Group
#!/usr/bin/env ruby
# Just a simple demo on how to use SODA 2.0 to access data from a Socrata data site
require 'net/http'
require 'uri'
require 'json'
require 'cgi'
require 'pp'
# Just a helper class
class Socrata
def initialize(domain = "opendata.socrata.com", app_token)
@domain = domain
@app_token = app_token
end
def get(url, params = {})
# Create query string of escaped key, value pairs
query = params.collect{ |key, val| "#{key}=#{CGI::escape(val)}" }.join("&")
puts "Query: #{query}"
# Create our request
request = Net::HTTP::Get.new(url + "?" + query)
request.add_field("X-App-Token", @app_token)
# BAM!
response = Net::HTTP.start(@domain, 80) { |http| http.request(request) }
# Check our response code
if response.code != "200"
raise "Error querying SODA API: #{response.body}"
else
return JSON::parse(response.body)
end
end
end
########
# Config
DOMAIN = "soda.demo.socrata.com"
APP_TOKEN = "Caaih41sUDnYxc3T5PurjLp1A"
# Set up our client
socrata = Socrata.new(DOMAIN, APP_TOKEN)
# Run a few simple queries
results = socrata.get("/resource/earthquakes.json", {"$where" => "magnitude > 4"})
results.each do |e|
puts "Found earthquake: #{e["occurred_at"]}, magnitude #{e["magnitude"]}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment