# encoding: utf-8 require 'rubygems' require 'mysql2' require 'pry' require 'nokogiri' require 'htmlentities' require 'open-uri' require 'active_record' estados = Hash[ "ac" => "Acre", "al" => "Alagoas", "am" => "Amazonas", "ap" => "Amapá", "ba" => "Bahia", "ce" => "Ceará", "df" => "Distrito Federal", "es" => "Espirito Santo", "go" => "Goiás", "ma" => "Maranhão", "mg" => "Minas Gerais", "ms" => "Mato Grosso do Sul", "mt" => "Mato Grosso", "pa" => "Pará", "pb" => "Paraíba", "pe" => "Pernambuco", "pi" => "Piauí", "pr" => "Paraná", "rj" => "Rio de Janeiro", "rn" => "Rio Grande do Norte", "ro" => "Rondônia", "rr" => "Roraima", "rs" => "Rio Grande do Sul", "sc" => "Santa Catarina", "se" => "Sergipe", "sp" => "São Paulo", "to" => "Tocantins" ] ActiveRecord::Base.establish_connection( :adapter => "postgresql", :host => "localhost", :database => "brasil", :username => "postgres", :password => "" ) # Limpa a base de dados connection = ActiveRecord::Base.connection connection.execute("DELETE FROM cidades") connection.execute("DELETE FROM estados") class Cidade < ActiveRecord::Base belongs_to :estado end class Estado < ActiveRecord::Base has_many :cidades end estados.each do |sigla, estado| Estado.create(:sigla => sigla.upcase, :nome => estado) end @estados = Estado.all @estados.each do |e| doc = Nokogiri::HTML(open("http://cidades.ibge.gov.br/download/mapa_e_municipios.php?lang=&uf=#{e.sigla}")) p "Pegando dados do estado de #{e.nome}" doc = doc.xpath('//*[@id="municipios"]/tbody/tr') doc.each do |mun| m = Cidade.new # Nome m.nome = mun.children[1].content.gsub("`", "'") # Codigo IBGE m.codigo_ibge = mun.children[3].content # Gentilico m.gentilico = mun.children[5].content.gsub("`", "'").encode.gsub("’", "").gsub("’", "") # Populacao 2010 m.populacao_2010 = mun.children[7].content.gsub('.', '') # Area Territorial 2015 - km² m.area = mun.children[9].content.gsub('.', '').gsub(',', '.') # Densidade Demografica m.densidade_demo = mun.children[11].content.gsub(',', '.') m.estado_id = e.id m.save end end p "Total de cidades importadas: #{Cidade.count}"