ceputils
Version:
**CepUtils** é uma biblioteca Node.js para cálculo de distâncias entre CEPs e obtenção de dados de endereços a partir de CEPs no Brasil. A biblioteca usa a API da AwesomeAPI para obter informações de CEPs e o `geolib` para calcular a distância entre os lo
81 lines (69 loc) • 2.6 kB
JavaScript
const axios = require('axios');
const geolib = require('geolib');
/**
* Verifica se o CEP é válido.
* @param {string} cep - O CEP a ser verificado.
* @returns {boolean} - Retorna true se o CEP for válido, false caso contrário.
*/
async function isValidCep(cep) {
try {
const response = await axios.get(`https://cep.awesomeapi.com.br/json/${cep}`);
if (response.data.status === 400) {
// Se a resposta indicar que o CEP é inválido
return false;
}
return true;
} catch (error) {
return false; // Se a API não conseguir responder, consideramos o CEP inválido
}
}
/**
* Busca os dados de um CEP usando a API AwesomeAPI.
* @param {string} cep - O CEP no formato 12345678.
* @returns {Promise<Object>} - Dados do CEP, incluindo latitude e longitude.
*/
async function getCepData(cep) {
if (!await isValidCep(cep)) {
throw new Error('CEP inválido.');
}
try {
const response = await axios.get(`https://cep.awesomeapi.com.br/json/${cep}`);
const { cep: formattedCep, address, district, city, state, lat, lng } = response.data;
return {
cep: formattedCep,
address,
district,
city,
state,
latitude: parseFloat(lat),
longitude: parseFloat(lng),
};
} catch (error) {
throw new Error('Erro ao buscar os dados do CEP: ' + error.message);
}
}
/**
* Calcula a distância total passando por uma sequência de CEPs.
* Recebe os CEPs como entrada e usa a função `getCepData` para obter as informações.
* @param {...string} ceps - Vários CEPs no formato de string (ex: '01001000').
* @returns {Promise<number>} - Distância total em quilômetros.
*/
async function calculateDistance(...ceps) {
if (ceps.length < 2) {
throw new Error('É necessário informar pelo menos dois CEPs para calcular a distância.');
}
let totalDistance = 0;
// Coleta os dados de cada CEP e calcula as distâncias
for (let i = 0; i < ceps.length - 1; i++) {
const cepData1 = await getCepData(ceps[i]);
const cepData2 = await getCepData(ceps[i + 1]);
const distance = geolib.getDistance(
{ latitude: cepData1.latitude, longitude: cepData1.longitude },
{ latitude: cepData2.latitude, longitude: cepData2.longitude }
);
// Somar a distância ao total (convertida para quilômetros)
totalDistance += geolib.convertDistance(distance, 'km');
}
return totalDistance;
}
module.exports = { getCepData, calculateDistance };