Assuntos relacionados à programação, pedaços de códigos, pequenas dicas, pequenos tutoriais, alguns vídeos, algumas fotos e etc.

Acessando o Cep Livre com Ruby

Posted: fevereiro 9th, 2009 | Author: Carlan Calazans | Tags: , , | 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.

#!/usr/bin/env ruby

# 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.


6 Comments on “Acessando o Cep Livre com Ruby”

  1. 1 PotHix said at 11:15 am on fevereiro 10th, 2009:

    Æ!!

    Bem legal o seu script cara! Eu ainda não conhecia esse serviço!

    Há braços

  2. 2 Carlan Calazans said at 12:43 pm on fevereiro 10th, 2009:

    Fala Willian! Valeu cara!
    Abraço!

  3. 3 nofxx said at 11:29 pm on março 20th, 2009:

    Bacana cara, mas nao use rexml nao.. nao eh mantido faz anos, e eh mto lento. Use nokogiri/hpricot ou libxml2.

  4. 4 Carlan Calazans said at 11:45 pm on março 20th, 2009:

    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!

  5. 5 Chris Benseler said at 11:11 am on março 28th, 2009:

    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!

  6. 6 Carlan Calazans said at 11:40 am on março 28th, 2009:

    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!


Leave a Reply