Skip to content

Instantly share code, notes, and snippets.

@Hipnosis183
Last active November 21, 2024 22:49
Show Gist options
  • Save Hipnosis183/ccd313af0935eb400fb91d7ab655990d to your computer and use it in GitHub Desktop.
Save Hipnosis183/ccd313af0935eb400fb91d7ab655990d to your computer and use it in GitHub Desktop.
Obtener localidades de Correo Argentino
// Código basado en 'localidades_AR' por androdron.
// https://github.com/androdron/localidades_AR
// Requiere el paquete de NPM 'node-fetch'.
// npm install node-fetch@2
const fetch = require('node-fetch');
const fs = require('fs');
const http = require('http');
const util = require('util');
const pipeline = util.promisify(require('stream').pipeline);
// Definir códigos de provincias (ISO 3166:AR).
const codigosProvincias = [
{ codigo: 'B', descripcion: 'Buenos Aires', archivo: 'buenos_aires' },
{ codigo: 'K', descripcion: 'Catamarca', archivo: 'catamarca' },
{ codigo: 'H', descripcion: 'Chaco', archivo: 'chaco' },
{ codigo: 'U', descripcion: 'Chubut', archivo: 'chubut' },
{ codigo: 'X', descripcion: 'Córdoba', archivo: 'cordoba' },
{ codigo: 'W', descripcion: 'Corrientes', archivo: 'corrientes' },
{ codigo: 'E', descripcion: 'Entre Ríos', archivo: 'entre_rios' },
{ codigo: 'P', descripcion: 'Formosa', archivo: 'formosa' },
{ codigo: 'Y', descripcion: 'Jujuy', archivo: 'jujuy' },
{ codigo: 'L', descripcion: 'La Pampa', archivo: 'la_pampa' },
{ codigo: 'F', descripcion: 'La Rioja', archivo: 'la_rioja' },
{ codigo: 'M', descripcion: 'Mendoza', archivo: 'mendoza' },
{ codigo: 'N', descripcion: 'Misiones', archivo: 'misiones' },
{ codigo: 'Q', descripcion: 'Neuquén', archivo: 'neuquen' },
{ codigo: 'R', descripcion: 'Río Negro', archivo: 'rio_negro' },
{ codigo: 'A', descripcion: 'Salta', archivo: 'salta' },
{ codigo: 'J', descripcion: 'San Juan', archivo: 'san_juan' },
{ codigo: 'D', descripcion: 'San Luis', archivo: 'san_luis' },
{ codigo: 'Z', descripcion: 'Santa Cruz', archivo: 'santa_cruz' },
{ codigo: 'S', descripcion: 'Santa Fé', archivo: 'santa_fe' },
{ codigo: 'G', descripcion: 'Santiago del Estero', archivo: 'santiago_del_estero' },
{ codigo: 'V', descripcion: 'Tierra del Fuego', archivo: 'tierra_del_fuego' },
{ codigo: 'T', descripcion: 'Tucumán', archivo: 'tucuman' },
//{ codigo: 'C', descripcion: 'Ciudad Autónoma de Buenos Aires', archivo: 'caba' },
];
http.createServer().listen(3000, '127.0.0.1', async () => {
console.log(`Obteniendo localidades de Correo Argentino...\n`);
await obtenerLocalidades();
console.log(`\nProceso finalizado.`);
process.exit(0); // Finalizar proceso del servidor.
});
const obtenerLocalidades = async () => {
// Crear directorio de salida si no existe.
if (!fs.existsSync('./localidades/')) { fs.mkdirSync('./localidades/'); }
// Buscar localidades para todas las provincias.
for (let p of codigosProvincias) {
try {
// Definir url a la API web de Correo Argentino.
const url = 'https://www.correoargentino.com.ar/sites/all/modules/custom/ca_forms/api/wsFacade.php';
const body = 'action=localidades&localidad=none&calle=&altura=&provincia=' + p.codigo;
// Definir datos de cabecera para la consulta al servidor API.
const headers = {
'Host': 'www.correoargentino.com.ar',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-GB,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.correoargentino.com.ar/formularios/cpa',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Content-Length': '60',
'Cookie': 'has_js=1',
'Connection': 'keep-alive',
'DNT': '1'
};
// Ejecutar consulta a servidor API.
const res = await fetch(url, { method: 'POST', headers: headers, body: body });
const localidades = new Function('return ' + await res.text())();
// Filtrar valores recibidos.
const $localidades = localidades.map((v) => { return { id: v.id, localidad: v.nombre, codigo_postal: v.cp }});
// Guardar localidades en archivo JSON.
await pipeline(JSON.stringify($localidades, null, 2), fs.createWriteStream(`./localidades/${p.archivo}.json`));
// Imprimir estado en la terminal.
console.log(`[OK] ${p.codigo} | ${p.descripcion}`);
} catch { console.log(`[ERROR] ${p.codigo} | ${p.descripcion}`); }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment