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.
box-o-sand/redis-with-ruby/earthquakes.rb

55 lines
1.0 KiB

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