Last active
November 21, 2024 22:49
-
-
Save Hipnosis183/ccd313af0935eb400fb91d7ab655990d to your computer and use it in GitHub Desktop.
Obtener localidades de Correo Argentino
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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