Skip to content

Instantly share code, notes, and snippets.

@rodrigolopezguerra
Last active April 13, 2022 11:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rodrigolopezguerra/bf0303fa9f7aba48ca59d74e1662e4c1 to your computer and use it in GitHub Desktop.
Save rodrigolopezguerra/bf0303fa9f7aba48ca59d74e1662e4c1 to your computer and use it in GitHub Desktop.
function test() {
updateSeries();
var a = 0;
}
function doGet(request) {
_setCount();
// Logica llamado principal
if (!request.parameters.route ) {
return ContentService.createTextOutput(JSON.stringify("Solo Chuck Norris puede llamar nuestra API sin permiso"));
}
if(request.parameters.route.indexOf("env") > -1) { return ContentService.createTextOutput(JSON.stringify(getEnv())); }
if(request.parameters.route.indexOf("index") > -1) { return ContentService.createTextOutput(JSON.stringify(principalesVariables())); }
if(request.parameters.route.indexOf("detalles") > -1) {
if(!request.parameters.route_id) {
return ContentService.createTextOutput(JSON.stringify("No se ha provisto un route_id. Por favor revise la documentación para más detalles"));
}
var params = find_route(request.parameters.route_id);
if (params == -1) return ContentService.createTextOutput(JSON.stringify("No existe ese route_id."));
return ContentService.createTextOutput(JSON.stringify(historial_detalle(request.parameters.fecha_desde,request.parameters.fecha_hasta,params)))
}
return ContentService.createTextOutput(JSON.stringify("La ruta no existe"));
}
function find_route(route_id) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('env');
var column = 7; //column Index
var columnValues = sheet.getRange(1, column, sheet.getLastRow()).getValues();
var searchResult = columnValues.findIndex(route_id);
if(searchResult != -1) {
var rng = sheet.getRange(searchResult+1, 1, 1, 7)
var rangeArray = rng.getValues();
return rangeArray[0];
}
return -1;
}
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (this[i].toString().indexOf(search) > -1 ) return i;
return -1;
}
function getEnv() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('env');
var values = sheet.getSheetValues(1,1,50,7);
var data = [];
var variable = {};
for(var i=1;i<values.length;i++) {
variable = {};
variable['serie'] = values[i][0];
variable['serie1'] = values[i][1];
variable['serie2'] = values[i][2];
variable['serie3'] = values[i][3];
variable['serie4'] = values[i][4];
variable['detalle'] = values[i][5];
variable['route_id'] = values[i][6];
if(variable['serie'] != '') data.push(variable);
}
return data;
}
function updateEnv() {
var options = {
"method" : "GET",
};
try {
var i;
var data = [];
var variable = {};
var url = "http://www.bcra.gob.ar/PublicacionesEstadisticas/Principales_variables.asp";
var result = UrlFetchApp.fetch(url,options);
var response = result.getContentText("iso-8859-1");
var start = "<table"
var end ="</table>"
var response = response.substring(response.indexOf(start)+start.length, response.indexOf(end));
response = response.split("<tr>");
for(i=0;i<response.length;i++) {
r = response[i];
if(r.indexOf("<a href=") > -1) {
variable = {};
variable['serie'] = 0;
variable['serie1'] = 0;
variable['serie2'] = 0;
variable['serie3'] = 0;
variable['serie4'] = 0;
variable['detalle'] = 0;
var start = "?serie="
var end ="&"
var s = r.substring(r.lastIndexOf(start)+start.length, r.indexOf(end));
s = s.trim();
variable['serie'] = s;
var start = "&detalle="
var end ="target="
var s = r.substring(r.lastIndexOf(start)+start.length, r.lastIndexOf(end));
s = s.replaceAll("'","");
s = s.trim();
variable['detalle'] = s;
if(r.indexOf("&serie1") > -1) {
var start = "serie1="
var end ="&"
var s1 = r.substring(r.lastIndexOf(start)+start.length);
var s = s1.substring(0, s1.indexOf(end));
s = s.trim();
variable['serie1'] = s;
}
if(r.indexOf("&serie2") > -1) {
var start = "serie2="
var end ="&"
var s1 = r.substring(r.lastIndexOf(start)+start.length);
var s = s1.substring(0, s1.indexOf(end));
s = s.trim();
variable['serie2'] = s;
}
if(r.indexOf("&serie3") > -1) {
var start = "serie3="
var end ="&"
var s1 = r.substring(r.lastIndexOf(start)+start.length);
var s = s1.substring(0, s1.indexOf(end));
s = s.trim();
variable['serie3'] = s;
}
if(r.indexOf("&serie4") > -1) {
var start = "serie4="
var end ="&"
var s1 = r.substring(r.lastIndexOf(start)+start.length);
var s = s1.substring(0, s1.indexOf(end));
s = s.trim();
variable['serie4'] = s;
}
data.push(variable);
}
}
_escribir_valores_en_env(data);
}
catch (e) {
Logger.log(e);
}
}
function _escribir_valores_en_env(data) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('env');
for(var i=0;i<data.length;i++) {
escribir_en_celda(sheet,i+2,1,data[i].serie);
escribir_en_celda(sheet,i+2,6,data[i].detalle);
escribir_en_celda(sheet,i+2,2,data[i].serie1);
escribir_en_celda(sheet,i+2,3,data[i].serie2);
escribir_en_celda(sheet,i+2,4,data[i].serie3);
escribir_en_celda(sheet,i+2,5,data[i].serie4);
escribir_en_celda(sheet,i+2,7,i);
}
}
function escribir_en_celda(sheet,fila,columna,valor) {
var cell = sheet.getRange(fila,columna);
cell.setValue(valor);
}
function principalesVariables() {
var options = {
"method" : "GET",
};
try {
var i,j;
var data = [];
var variable = {};
var url = "http://www.bcra.gob.ar/PublicacionesEstadisticas/Principales_variables.asp";
var result = UrlFetchApp.fetch(url,options);
var response = result.getContentText("iso-8859-1");
var start = "<table"
var end ="</table>"
var response = response.substring(response.indexOf(start)+start.length, response.indexOf(end));
response = response.split("<tr>");
for(i=0;i<response.length;i++) {
r = response[i];
l = r.split("<td");
for(j=0;j<l.length;j++) {
r = l[j];
if(r.indexOf("<a href=") > -1) {
variable = {};
var start = "target='_self'>"
var end ="</a"
var s = r.substring(r.lastIndexOf(start)+start.length, r.lastIndexOf(end));
s = s.replaceAll("&nbsp","");
s = s.replaceAll("\xa0","");
s = s.replaceAll(";","");
s = s.trim();
variable['variable'] = s;
}
if(r.indexOf("style=\"text-align:right\">") > -1) {
start = "style=\"text-align:right\">"
end = "</td>"
var s = r.substring(r.lastIndexOf(start)+start.length, r.lastIndexOf(end));
if(s.lastIndexOf("/") > -1) {
variable['fecha'] = s;
} else {
variable['valor'] = s;
data.push(variable);
}
}
}
}
variable = {};
variable['count']=_getCount()
data.push(variable);
return data;
}
catch (e) {
Logger.log(e);
}
}
function historial_detalle(fecha_desde,fecha_hasta,params) {
var options = {
'method': 'get',
};
try {
var data = [];
var variable = {};
var fecha_desde = fecha_desde;
var fecha_hasta = fecha_hasta;
var serie = serie;
var detalle = params[5];
var detalle_filtered = detalle.replaceAll("%","");
var detalle_encode = escape(detalle_filtered);
var url = "http://www.bcra.gob.ar/PublicacionesEstadisticas/Principales_variables_datos.asp?fecha_desde="+fecha_desde+"&fecha_hasta="+fecha_hasta+"&B1=Enviar&primeravez=1&serie="+params[0]+"&serie1="+params[1]+"&serie2="+params[2]+"&serie3="+params[3]+"&serie4="+params[4]+"&detalle="+detalle_encode;
console.log(url);
var result = UrlFetchApp.fetch(url,options);
var response = result.getContentText("iso-8859-1");
var start = "<table"
var end ="</table>"
var s = response.substring(response.indexOf(start)+start.length, response.indexOf(end));
s = s.split("<tr>")
for(i=0;i<s.length;i++) {
if(s[i].indexOf("style=\"text-align:right\">") > -1) {
variable = {};
variable['variable'] = detalle;
start = "<td>";
end = "</td>";
variable['fecha'] = s[i].substring(s[i].indexOf(start)+start.length,s[i].indexOf(end));
start = "style=\"text-align:right\">";
variable['valor'] = s[i].substring(s[i].indexOf(start)+start.length,s[i].lastIndexOf(end));
variable['valor'] = variable['valor'].replaceAll("\n","").replaceAll("\t","").replaceAll("\r","");
data.push(variable);
}
}
variable = {};
variable['count']=_getCount()
data.push(variable);
return data;
}
catch (e) {
Logger.log(e);
}
}
function _getCount() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('main');
var count = sheet.getRange(2,1).getValue();
return count;
}
function _setCount() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('main');
var count = _getCount()+1;
sheet.getRange(2,1).setValue(count);
return count;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment