edumucelli / cepaberto-api-examples

Exemplos de como implementar a requisição a API do CEP Aberto usando seu token de acesso
GNU General Public License v3.0
44 stars 20 forks source link

Erro esporádico ao buscar cidades com caracteres acentuados #18

Open GustavoAdolfo opened 5 years ago

GustavoAdolfo commented 5 years ago

Alguns erros acontece ao se fazer a busca por cidades que possuem letras acentuadas, por exemplo: http://www.cepaberto.com/api/v3/address?estado=SP&cidade=São Paulo // retorna vazio http://www.cepaberto.com/api/v3/address?estado=SP&cidade=São+Paulo // retorna vazio http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o+Paulo // erro 500 http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o%20Paulo // erro 500 http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%C3%A3o%20Paulo // erro 500 http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%C3%A3o+Paulo // erro 500 http://www.cepaberto.com/api/v3/address?estado=SP&cidade=São Pedro // sucesso http://www.cepaberto.com/api/v3/address?estado=SP&cidade=São+Pedro // sucesso http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o+Pedro // erro 500 http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o%20Pedro // erro 500 etc... Podemos concluir que a API considera a consulta correta como "São Paulo" ou "São+Paulo" etc. Mas a documentação não é clara quanto a esses pontos. Acredito que não há mesmo resultado para a consulta considerando a forma correta dos parâmetros, mas seria bom se isto fosse documentado de forma mais clara. Obrigado

rodrigoestevao commented 4 years ago

Estou tendo o mesmo problema, e não diria que é esporádico, uma vez que aconteceu todas as vezes que eu tentei acessar.

CORolim commented 4 years ago

Além de cidades com acento também nao consigo efetuar busca por cidades com espaço no nome

curl -vvv -H "Authorization: Token token=<>" "http://www.cepaberto.com/api/v3/address?estado=RS&cidade=Porto Alegre" <-- 200 ok mas resultado vazio

curl -vvv -H "Authorization: Token token=<>" "http://www.cepaberto.com/api/v3/address?estado=RS&cidade=Porto%Alegre" <-- 200 ok mas resultado vazio

curl -vvv -H "Authorization: Token token=<>" "http://www.cepaberto.com/api/v3/address?estado=RS&cidade=Ijui" <-- resultado ok - {"altitude":328.0," .... }}*

curl -vvv -H "Authorization: Token token=<>" "http://www.cepaberto.com/api/v3/address?estado=RS&cidade=Ijuí" (nome da cidade com acento) <-- 400 Bad Request

Seria possivel atualizar a documentacao sobre como as requisicoes devem ser efetuadas em situacoes assim (com acento e espaço)??

edumucelli commented 4 years ago

Olá @GustavoAdolfo

Não consigo reproduzir nem um dos erros 500 mencionados. Fazendo os testes hoje todos as URLs abaixo retornam 200, embora não encontrem resultado, é verdade. Vou atualizar a documentação, pois deve-se usar acentos, da forma como o nome da cidade é escrito, sem fazer encoding da URL.

http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o+Paulo http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o%20Paulo http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%C3%A3o%20Paulo http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%C3%A3o+Paulo http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o+Pedro http://www.cepaberto.com/api/v3/address?estado=SP&cidade=S%E3o%20Pedro

edumucelli commented 4 years ago

De qualquer forma eu não recomendo fazer o encoding por si mesmo, use alguma biblioteca, por exemplo em Python com Requests:

import requests

headers = {'Authorization': 'Token token=...'}

def test_api_with_accent():
    url = "http://cepaberto.com/api/v3/address"
    for params in [
        {'estado': 'SP', 'cidade': 'São Paulo'},
        {'estado': 'RS', 'cidade': 'Ijuí'}
    ]:
        response = requests.get(url, params=params, headers=headers)
        assert response.status_code == 200
CORolim commented 4 years ago

Como é feita a consulta no caso de /address?

Pergunto pq percebi que se for informado somente estado e cidade as vezes nao retorna (caso de Santo Ângelo no RS). Agora se coloco estado, cidade E logradouro obtem-se os dados... Ou seja, nao existe um "AND" na consulta?

Em dom., 19 de jan. de 2020 às 11:34, Eduardo notifications@github.com escreveu:

De qualquer forma eu não recomendo fazer o encoding por si mesmo, use alguma biblioteca, por exemplo em Python com Requests:

def test_api_with_accent():

for params in [

    {'estado': 'SP', 'cidade': 'São Paulo'},

    {'estado': 'RS', 'cidade': 'Ijuí'}

]:

    url = "http://cepaberto.com/api/v3/address"

    response = requests.get(url, params=params, headers=headers)

    assert response.status_code == 200

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/edumucelli/cepaberto-api-examples/issues/18?email_source=notifications&email_token=AB4YSW5OMIER4EWSNTURGSTQ6RQJHA5CNFSM4G45TLJKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEJKTUCY#issuecomment-576010763, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB4YSW3IARQCVVQ75BCBJFDQ6RQJHANCNFSM4G45TLJA .