-
Notifications
You must be signed in to change notification settings - Fork 0
/
correios.go
70 lines (61 loc) · 1.68 KB
/
correios.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cepgo
import (
"encoding/json"
)
type (
CooreiosService struct {
}
CorreiosModel struct {
UF string `json:"uf"`
Localidade string `json:"localidade"`
LogradouroDNEC string `json:"logradouroDNEC"`
LogradouroTextoAdicional string `json:"logradouroTextoAdicional"`
LogradouroTexto string `json:"logradouroTexto"`
Bairro string `json:"bairro"`
CEP string `json:"cep"`
Street string `json:"street"`
Neighborhood string `json:"neighborhood"`
State string `json:"state"`
City string `json:"city"`
}
CooreiosModelResponse struct {
Erro bool `json:"erro"`
Mensagem string `json:"mensagem"`
Total int `json:"total"`
Dados []CorreiosModel `json:"dados"`
}
)
func (c *CooreiosService) Execute(cep string, ch chan<- *CEP, errCh chan<- error) {
data := map[string]string{
"endereco": cep,
"tipoCEP": "ALL",
}
body, err := poster("https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php", data)
if err != nil {
errCh <- err
return
}
var model *CooreiosModelResponse
if err := json.Unmarshal(body, &model); err != nil {
errCh <- err
return
}
if model.Erro || len(model.Dados) == 0 {
errCh <- ErrorUnexpectedResponse
return
}
cepResponse := model.Dados[0]
cepNumber, err := ParseCEPString(cepResponse.CEP)
if err != nil {
errCh <- ErrorUnexpectedResponse
return
}
ch <- &CEP{
Cep: cepNumber,
Street: cepResponse.LogradouroDNEC,
Neighborhood: cepResponse.Bairro,
City: cepResponse.Localidade,
State: cepResponse.UF,
}
return
}