Acessando o Cep Livre com Ruby
Posted: fevereiro 9th, 2009 | Author: Carlan Calazans | Tags: aprendizado, dev, ruby | 6 Comments »A (PC)² consultoria lançou um serviço chamado Cep Livre a algumas semanas atrás. O serviço tem por objetivo fornecer informações sobre CEPs brasileiros. O funcionamento é similar aos serviços já existentes, você faz uma chamada em uma URL e recebe os dados em um formato que escolher (XML ou CSV). Acredito que não vai demorar para fornecerem o formato JSON já que ele é amplamente utilizado hoje em dia, inclusive em aplicações móveis (XML não pelo-amor-de-deus).
A diferença em relação aos serviços que conheço é a possibilidade de adicionar um CEP a base de dados preenchendo um formulário, ou seja, qualquer um pode fazer. Ah, o mais importante, o serviço é gratuito e a (PC)² consultoria afirma que não tem intenção de cobrar pelo serviço no website deles.
Agora a parte divertida. Fiz uma classe que busca as informações de CEP, faz o parser e apresenta em dois formatos: Array e Hash.
# 9/2/2009
# Carlan Calazans (carlancalazans at gmail.com)
require 'net/http'
require 'rexml/document'
class CepLivre
URL_CEP_LIVRE = 'http://ceplivre.pc2consultoria.com/index.php?module=cep&formato=xml&cep='
FIELDS = %w(tipo_logradouro logradouro bairro cidade estado_sigla)
def initialize(cep)
@cep = cep
get_data
end
def to_array
@result = []
process_a
end
def to_hash
@result = {}
process_h
end
private
def get_data
@data = Net::HTTP.get_response(URI.parse("#{URL_CEP_LIVRE}#{@cep}"))
raise "Connection error." unless @data.kind_of?(Net::HTTPSuccess)
@xml = REXML::Document.new(@data.body)
end
def process_a
FIELDS.each do |f|
field = REXML::XPath.match(@xml, "//#{f}").first
@result << field.text
end
@result
end
def process_h
FIELDS.each do |f|
field = REXML::XPath.match(@xml, "//#{f}").first
@result[f] = field.text
end
@result
end
end
# Array
puts CepLivre.new("29040-470").to_array
# Hash
puts CepLivre.new("29040-470").to_hash
[Update]
Faça o download da versão rexml e libxml-ruby.
Æ!!
Bem legal o seu script cara! Eu ainda não conhecia esse serviço!
Há braços
Fala Willian! Valeu cara!
Abraço!
Bacana cara, mas nao use rexml nao.. nao eh mantido faz anos, e eh mto lento. Use nokogiri/hpricot ou libxml2.
Fala Marcos!
Por incrível que pareça esta semana eu estava olhando justamente o libxml-ruby aqui [ http://is.gd/ohfZ ]. Libxml2 também é legal. Na hora de escrever nem me atentei pra isso, só queria o script pronto e funcionando.
Vou ver se faço um novo post com libxml2 e libxml-ruby, depois coloco um update neste post com o link
Valeu cara!
Abraço!
Bem bacana isso, Carlan!
Eu fiz o mesmo para p projeto do Cep Livre, em PHP!
http://www.chrisb.com.br/blog/consulta-de-cep-em-ajax/
[]s!
Fala Chris!
Eu conhecia a implementação do poomax. Legal. Um amigo que senta ao meu lado, na empresa, fez a versão para J2ME.
O serviço é bem legal e útil, só ficou faltando a versão JSON mesmo. Prefiro este formato ao XML.
Abraço!