require 'csv' require 'redis/connection/hiredis' require 'redis' require 'logger' require 'open-uri' class Earthquakes DATA_URL = 'http://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt' def initialize @redis = Redis.new @logger = Logger.new(STDOUT) @logger.formatter = proc do |severity, datetime, progname, msg| "#{datetime}: #{msg}\n" end end def load_data open(DATA_URL) do |f| CSV.parse(f.read, :headers => true) do |row| @redis.multi do |r| @logger.info("Adding earthquake #{row['Eqid']}") r.sadd('earthquakes', row['Eqid']) row.headers.each do |header| r.hset("eqid:#{row['Eqid']}", header, row[header]) end end end end end def dump_data @redis.smembers('earthquakes').each do |eqid| @logger.info( "Earthquake #{eqid} 'Src': #{ @redis.hget("eqid:#{eqid}", 'Src')}" ) end end end def main eq = Earthquakes.new eq.load_data eq.dump_data end if $0 == __FILE__ main end