codigos-gob-bo
Version:
Node.js, cliente para obtener informacion de codigos.gob.bo
148 lines (133 loc) • 3.97 kB
JavaScript
/**
* Node.js, cliente para obtener informacion de codigos.gob.bo.
*
* Módulo de peticiones a codigos.gob.bo y uso de promise para simplificar las funciones.
* No requiere autenticacion codigos.gob.bo ofrece informacion abierta en distintos formatos.
*
* @module codigos-gob-bo
* @author Teodoro Nina <tnina@adsib.gob.bo>
* @license LPG-Bolivia
*/
;
var request_promise = require("request-promise");
var Promise = require("bluebird");
module.exports = {
/**
* Definiendo una instancia
*
* @method
* @returns {Promise}
*/
ini: function (parametros) {
parametros = parametros || {};
var c = new codigos(parametros);
if (!vacio(c.url)) {
return Promise.resolve(c);
}else{
return Promise.reject("Error: en la url.");
}
}//inicio
}//export module
//region inicializando nuestros parametros
function codigos(parametros) {
var this_ = this;
//definiendo nuestro array
this_.url = null;
//recuperando parametros
parametros = parametros || {};
//verificando los elementos en array
if ("mensaje" in parametros) {
this_.mensajes = parametros.mensajes;
}else{
this_.mensajes = {
warn: function() {},
error: function() {}
};
}//mensaje in
if ("url" in parametros) {
if(!vacio(parametros.url)){
this_.url = parametros.url;
}else{
this_.mensajes.error('La (url) no puede ser vacio.');
}
}//url in
};
//end region inicializando nuestros parametros
//region para realizar la llamada a la urlCodigos
codigos.prototype.call = function (opciones) {
var this_ = this;
var tipoElemento;
var itemId;
var formato;
var args = {};
var formatosValidos = ["json","csv", "xml"]
if ("tipoElemento" in opciones) {
if(!vacio(opciones.tipoElemento)){
tipoElemento = opciones.tipoElemento;
}else{
this_.mensajes.error("[call] Tipo elemento no tiene valor.");
return Promise.reject("Tipo elemento no tiene valor.");
}
} else {
this_.mensajes.error("[call] Falta tipo elemento para procesar.");
return Promise.reject("Falta tipo elemento para procesar.");
}//tipoElemento
if ("formato" in opciones) {
if(!vacio(opciones.formato)){
formato = opciones.formato;
}else{
this_.mensajes.error("[call] Formato no tiene valor.");
return Promise.reject("Tipo formato no tiene valor.");
}
} else {
this_.mensajes.error("[call] Falta formato para procesar.");
return Promise.reject("Falta formato para procesar.");
}//formato
if ("args" in opciones) {
if(opciones.args){
itemId = opciones.args.codigo;
}else{
itemId = null;
this_.mensajes.error("[call] Argumento puede contener id:id.");
return Promise.reject("Argumento puede contener id:id.");
}
} else {
itemId = null;
}//args
if(vacio(itemId)){
var request_opciones = {
uri: this_.url + "/" + tipoElemento + "?formato="+formato,
json: true,
method: "GET"
}
}else{
var request_opciones = {
uri: this_.url + "/" + tipoElemento + "/"+itemId+"?formato="+formato,
json: true,
method: "GET"
}
}
// return request_promise(this_.url + "/" + elemento + "?formato="+formato)
// .then((html) => console.log(html)) // Process html...
// .catch((err) => console.error(err)); // Crawling failed...
console.log(request_opciones);
return request_promise(request_opciones)
.then((respuesta) => {
console.log(respuesta) // Process respuesta...
return respuesta;
})
.catch((err) =>{
console.error(err);
return err;
}); // fallo...
}//end call
//end region para realizar la llamada a la urlCodigos
//region perifica vacio o null
function vacio(str){
if(str == "" || str == null)
{
return true;
}
return false;
};
//end region perifica vacio o null