Skip to content

Instantly share code, notes, and snippets.

@mcamiano
Created May 9, 2012 18:29
Show Gist options
  • Save mcamiano/2647718 to your computer and use it in GitHub Desktop.
Save mcamiano/2647718 to your computer and use it in GitHub Desktop.
"Controller" and routes for weather underground inquiry via Sinatra
rvm use ruby-1.8.7-p302@sinatra
require 'sinatra' # Core Web App Framework
require "sinatra/reloader" if development? # Restart automatically after development changes
require 'rack-flash'
require 'base64'
require 'open-uri'
APP = { :name => "default_app",
:database_name => "default_app",
:hit_counter => 0
}
configure do
use Rack::Flash
set :sessions, true # DANGER: Sinatra sessions are Cookie based; avoid anything sensitive!!!
set :domain, ENV['URL'] || "localhost"
set :appinfo, APP
end
helpers do
not_found do
serve_static_file "404.html"
end
end
require 'controller'
get '/weather' do
redirect '/weather/', 303
end
get '/weather/:zip?' do |zip|
content =[]
if !zip.nil?
apikey="13fa13d445725fb5"
begin
f = open("http://api.wunderground.com/api/#{apikey}/animatedradar/q/#{zip}.gif?newmaps=1&timelabel=1&timelabel.y=10&num=5&delay=50")
rescue
content << "<h1>Sorry, Weather Underground Radar for #{zip} appears to be offline"
else
img_content = f.read
base64_encoded_image = Base64.encode64(img_content)
content << "<h1>Weather Underground Radar for #{zip}</h1>"
content << "<img src='data:image/gif;base64,#{base64_encoded_image}' alt='Weather Underground Radar'/>"
ensure
f.close if not f.nil?
end
else
content << "<h1>Weather Underground Radar</h1>"
content << "<p>Please enter a zip code: </p>"
content << "<form>"
content << "<input id='zip' type='text' value='' />"
content << "<input id='go' type='button' value='Go' />"
content << "</form>"
content << %{
<script>
var load = function() {
document.getElementById('go').addEventListener("click", function() {
var zip = document.getElementById('zip').value;
window.location = "/weather/"+zip;
});
};
document.addEventListener("DOMContentLoaded", load, false);
</script>
}
content.join
end
end
source 'http://rubygems.org'
gem 'sinatra', '1.1.2'
gem 'rack-flash'
gem 'sinatra-reloader', :group => :development
GEM
remote: http://rubygems.org/
specs:
backports (1.18.2)
monkey-lib (0.5.4)
backports
rack (1.2.1)
rack-flash (0.1.1)
rack
sinatra (1.1.2)
rack (~> 1.1)
tilt (~> 1.2)
sinatra-advanced-routes (0.5.1)
monkey-lib (~> 0.5.0)
sinatra (~> 1.0)
sinatra-sugar (~> 0.5.0)
sinatra-reloader (0.5.0)
sinatra (~> 1.0)
sinatra-advanced-routes (~> 0.5.0)
sinatra-sugar (0.5.0)
monkey-lib (~> 0.5.0)
sinatra (~> 1.0)
tilt (1.2.2)
PLATFORMS
ruby
DEPENDENCIES
rack-flash
sinatra (= 1.1.2)
sinatra-reloader
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment