Digitar CEP e pegar endereço

482 views
Skip to first unread message

eltin182

unread,
Jan 18, 2016, 3:20:41 PM1/18/16
to rails-br
Aew galera, tenho certeza que alguém já deve ter tido essa dúvida, mas não achei.
Enfim, to tentando usar essa gem: 


Mas não to conseguindo, só consegui instalar, a parte que fala de como usar, simplesmente joga um código na tela e eu nao sei nem por onde vai. Eu criei 1 scaffold endereço, nele eu pus cep, rua, numero, cidade, estado... Daí eu queria fazer o que vários sistemas fazem, digitar cep e pegar nome da rua, cidade, bairro e estado. Não tem um tutorial que mostre isso não?

Vlww!

Hugo Fagundes

unread,
Jan 18, 2016, 8:28:30 PM1/18/16
to rails-br
Bom, eu sempre usei essa: https://github.com/tapajos/brazilian-rails/tree/master/brcep
bem simples de usar...

Abraço

Oséias Ferreira

unread,
Jan 19, 2016, 2:10:48 PM1/19/16
to rail...@googlegroups.com
Este brcep usa api de terceiros (republicavirtual) para fazer a pesquisa do CEP.

O https://github.com/prodis/correios-cep usa a api do próprio correios. Provavelmente é a mesma api usada nos aplicativos dos correios. Não sei se é legal a até quando/como vai funcionar.

Mas eu testei aqui com o código de exemplo o funciona normal.
Não precisa do require no rails.
Só precisa colocar no seu Gemfile:
gem 'correios-cep'

Você precisa receber o cep em uma action e instanciar o objeto.

finder = Correios::CEP::AddressFinder.new
address = finder.get("54250610”)

Aí é só usar onde precisar a hash:
{:neighborhood=>"Cavaleiro", :zipcode=>"54250610", :city=>"Jaboatão dos Guararapes", :complement=>"", :address=>"Rua Fernando Amorim", :state=>"PE”}

--
Oséias Ferreira
> --
> --
> Você recebeu essa mensagem porquê está inscrito no Google
> Groups "rails-br".
> Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
> Para se descadastrar, mande um e-mail para
> rails-br+u...@googlegroups.com
> Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
> Leia nossa política de uso: http://goo.gl/YGgt7
>
> ---
> Você recebeu essa mensagem porque está inscrito no grupo "rails-br" dos Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para rails-br+u...@googlegroups.com.
> Para mais opções, acesse https://groups.google.com/d/optout.

eltin182

unread,
Jan 19, 2016, 2:24:09 PM1/19/16
to rails-br
Eu consegui aqui sem o Rails, apenas uma jquery com ajax msm, porém agora a luta será armazenar os dados no rails.

eltin182

unread,
Jan 19, 2016, 2:24:30 PM1/19/16
to rails-br
Ah, vlwww pela ajuda feras!

Thiago Conti

unread,
Jan 19, 2016, 2:27:35 PM1/19/16
to rail...@googlegroups.com
Vi esse aqui outro dia, mas não testei ainda:




Em 19 de janeiro de 2016 17:24, eltin182 <elton.me...@gmail.com> escreveu:
Ah, vlwww pela ajuda feras!

Thiago Miranda

unread,
Jan 20, 2016, 3:09:44 PM1/20/16
to rails-br
Cara,

Ano passado precisei encontrar uma solução onde não ficássemos dependentes de nenhuma api ou banco externo.
Estávamos tendo muitos problemas e as requisições externas estavam demorando, mesmo fazendo cache, enfim....
Comecei a rascunhar uma gem que está parada... mas o desenvolvimento me trouxe algum conhecimento incalculável.

Meu objetivo nessa gem era armazenar as listas de ceps em um hash e retornar o endereço utilizando o cep como key... como é em countries gem (https://github.com/hexorx/countries)
Obviamente o negócio ficou enorme e lento para entrar em produção e acabei abandonando a idéia...
Mas... como inicialmente eu ia preencher o hash através de um yaml... Eu precisava obter todos os ceps de algum lugar...
Foi então que descobri que os Correios tem uma ferramenta chamada GPBe (Guia Postal Brasileiro Eletrônico) e dentro dele um mdb (Access) atualizado e oficial!
O GPBe deve custar uns R$50,00..

Como não utilizei a gem migramos o yaml para o banco e hoje utilizo o yaml para atualizar o banco com possíveis ceps novos...

PS:
Na gem tem uma rake task para gerar o yaml através do mbd...

Oséias Ferreira

unread,
Jan 20, 2016, 4:08:51 PM1/20/16
to rail...@googlegroups.com
Meio loucura botar o CEP do Brasil inteiro dentro de um yaml, não?
Porque você não colocou isto no banco de dados?

--
Oséias Ferreira

Thiago Miranda

unread,
Jan 20, 2016, 5:24:23 PM1/20/16
to rails-br
Hoje está no banco...
Mas o yaml com todos os ceps dá uns 100mb...
O carregamento do yaml > hash demora um pouco...
Mas depois de persistido na memória... não me parecia uma ideia ruim.
E por outro lado você terá um banco inicial com umas 1M rows... só de ceps..

Enquanto poderia (segunda a ideia inicial) fazer simplesmente Cep.new("23045000")

Oséias Ferreira

unread,
Jan 20, 2016, 5:58:24 PM1/20/16
to rail...@googlegroups.com
Não faz sentido colocar 100mb num arquivo que deveria ser para configuração da app.
Sem falar que o app terá que ficar com isto na memória o tempo todo.

E por outro lado você terá um banco inicial com umas 1M rows... só de ceps..

Qual é o problema disto?
O db separa as tabelas. Tabelas que crescem muito, podem deixar a app lenta nas pesquisas.
Mas se a pesquisa é feita numa tabela pequena, mesmo que o banco contenha tabelas grandes, a pesquisa é rápida.
E definitivamente 1M de rows não é nada para os bancos atuais. No backup comprimido isto pesa pouco.

--
Oséias Ferreira

Carlos Eduardo Ribeiro

unread,
Jan 20, 2016, 6:03:28 PM1/20/16
to rail...@googlegroups.com
Sem dizer que toda alteraçāo de CEP exista a necessidade do reload do .yaml.

Nāo é loucura colocar isso em um database. O database aguenta esse tamanho de tabela muito fácilmente. 
Ou no máximo colocar isso em um redis..

Leandro Machado Pereira

unread,
Jan 20, 2016, 7:00:56 PM1/20/16
to rail...@googlegroups.com

Se quiser mais performance, pode colocar no sqllite ou mongodb.

Thiago Miranda

unread,
Jan 21, 2016, 3:02:53 AM1/21/16
to rails-br
Acho que estamos perdendo o foco aqui!

Citei a gem porque ela tem um exemplo de conversão do mdb...
Sim! É possível converter o mdb diretamente para sql.
Você não vai encontrar essa solução sobre o MDB do GBPE claramente em uma simples pesquisa no Google.

Sim! A solução que encontrei foi migrar os ceps para o banco.
Nunca disse que isso era um problema.

Mas...
Como descrevi a ideia era fazer como nas gems Money, Countries, etc
Não preciso ter uma tabela no banco com todas as Nações apenas para preencher um selectbox...
Não preciso ter uma tabela no banco com informações sobre Moedas, se preciso saber apenas quantas casas decimais exibir, ou como formata-la em uma string.
Não me parece necessário ter uma tabela no banco com CEPs se o CEP é a própria informação, e o que ele me retorna (logradouro, bairro), também é persistido no modelo.
Até porque no meu caso em específico eu nem mesmo preciso do CEP, apenas a latitude e longitude do mesmo...
E quanto a atualização, de qualquer forma preciso manter a tabela no banco atualizada... Me parece mais legível fazer um diff de yaml e mante-lo atualizado.

Alex Takitani

unread,
Jan 21, 2016, 7:42:43 AM1/21/16
to rail...@googlegroups.com
Não dá Thiago, é informação demais pra colocar num arquivo texto.

Toda vez que vc instanciar a gem ela vai colocar na memória todos os ceps, fica inviável.

Essa quantidade de informação é coisa pra banco mesmo.

--

Everaldo Gomes

unread,
Jan 21, 2016, 8:06:03 AM1/21/16
to rail...@googlegroups.com
O sistema operacional faz paginação, na hora de ler um arquivo (bufferização).

Claro que pode fazer um  uso adicional do disco. Mas, bom, tem que se conhecer o cenário da aplicação.

Deixa o cara fazer do jeito que ele quer. Ele conhece a aplicação melhor que a gente - casos de uso etc.

Ademais, o Correios é meio chato na questão de licença de uso. Então, quanto menos ele manipular ou expor os arquivos melhor pra ele.


Reply all
Reply to author
Forward
0 new messages