Skip to content

Instantly share code, notes, and snippets.

@dcatanzaro
Last active April 15, 2026 18:41
Show Gist options
  • Select an option

  • Save dcatanzaro/5fc1bbd4753403305be7543d28b2eddf to your computer and use it in GitHub Desktop.

Select an option

Save dcatanzaro/5fc1bbd4753403305be7543d28b2eddf to your computer and use it in GitHub Desktop.
Botcito para el Galicia
const axios = require("axios");
let lastIndexMovement = 0;
const TELEGRAM_BOTID = "";
const TELEGRAM_CHATID = "";
class Telegram {
sendTelegramMessage(message) {
const botId = TELEGRAM_BOTID;
const chatId = TELEGRAM_CHATID;
if (!botId || !chatId) {
return;
}
try {
const telegramMsg = encodeURIComponent(message);
const url = `https://api.telegram.org/${botId}/sendMessage?chat_id=${chatId}&text=${telegramMsg}&parse_mode=HTML`;
axios.get(url);
} catch (e) {
console.log(e);
}
}
}
const telegram = new Telegram();
const getMovimientosGalicia = async () => {
const url =
"https://cuentas.bancogalicia.com.ar/Cuentas/GetMovimientosCuenta";
const cookies =
"";
const headers = {
accept: "application/json, text/javascript, */*; q=0.01",
"accept-language": "en-US,en;q=0.9,es;q=0.8",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
cookie: cookies,
Referer: "https://cuentas.bancogalicia.com.ar/cuentas/mis-cuentas",
"Referrer-Policy": "strict-origin-when-cross-origin",
};
const body = "";
const result = await axios.post(url, body, { headers });
return result.data.Model.Movimientos;
};
const init = async () => {
let movementsGalicia = await getMovimientosGalicia();
movementsGalicia = movementsGalicia.reverse();
movementsGalicia.forEach((movement) => {
if (movement.IndiceMovimiento > lastIndexMovement) {
lastIndexMovement = movement.IndiceMovimiento;
if (movement.ImporteCredito !== "0,00") {
telegram.sendTelegramMessage(
`<strong>馃彟 Banco</strong>: Galicia\n<strong>鉂楋笍 Nuevo movimiento:</strong> ${movement.DescripcionAMostrar}\n<strong>馃挵 Ingreso:</strong> ${movement.ImporteCreditoLabel}`
);
} else {
telegram.sendTelegramMessage(
`<strong>馃彟 Banco</strong>: Galicia\n<strong>鉂楋笍 Nuevo movimiento:</strong> ${movement.DescripcionAMostrar}\n<strong>馃挵 Gasto:</strong> ${movement.ImporteDebitoLabel}`
);
}
}
});
};
setInterval(init, 10000);
@amiotti

amiotti commented Oct 19, 2022

Copy link
Copy Markdown

el cookies="" es la cookie que obtiene una vez que inicia sesi贸n no? supongo est谩 vac铆o para no pasar la info no? Otra cosa, el endpoint de galicia como lo obtiene ? hay alguna API para esto?

@dmosqupr23

Copy link
Copy Markdown

Muy bueno! una consulta!
Que tipo de Cookie se utiliza para poder leer el contenido de la pagina?

@4valentinn

Copy link
Copy Markdown

como puedo descargarlo y empezar a usarlo?

@camilokawerin

Copy link
Copy Markdown

como puedo descargarlo y empezar a usarlo?

ten茅s que instalar nodeJS y correr este script en un terminal, o bien instalarlo como servicio para no tener que tener la ventanita del terminal abierta todo el tiempo

@tstambulsky

Copy link
Copy Markdown

Muy bueno Damian!
Alguien tiene idea si se puede hacer para Santander?

@lautarolopez

Copy link
Copy Markdown

Muy bueno Damian! Alguien tiene idea si se puede hacer para Santander?
@tstambulsky

Reci茅n de curioso estuve chequeando, hay que adaptar algunas cositas pero se puede seguir la misma l贸gica tranquilamente

@camilokawerin

Copy link
Copy Markdown

驴Alguien que averig眉e si es factible hacerlo para ICBC? Necesito obtener datos de transferencias recibidas en una cuenta (titular origen, n煤mero de operaci贸 o algo) para validar pagos.

@luxarts

luxarts commented Oct 19, 2022

Copy link
Copy Markdown
  • La cookie podr铆a estar en una variable de entorno
  • No tiene rate limiter la API del banco?
  • Habr铆a que averiguar si tiene paginado para traerte pocos elementos. Si el tiempo entre requests es bajo, no necesitas traerte muchos elementos. Por lo contrario subir el tiempo entre requests hace que te tengas que traer mas elementos para estar actualizado y no perder ninguno.
  • movementsGalicia.reverse() se puede reemplazar por leer el array al rev茅s y te evitas una operaci贸n costosa
  • El forEach lo pod茅s romper (break) cuando el movimientos.IndiceMovimiento < lastIndexMovement
  • El lastIndexMovement se te va a resetear si reinicias la app. Tendr铆a que quedar persistido en alg煤n lado (un redis, por ejemplo). De lo contrario cada vez que levantes la app te va a tirar los mensajes por todos los movimientos que te devuelve la API (que ya envi贸).
  • Faltan tests (?) JAJAJAJAJA

@dante-militello

Copy link
Copy Markdown
  • La cookie podr铆a estar en una variable de entorno
  • No tiene rate limiter la API del banco?
  • Habr铆a que averiguar si tiene paginado para traerte pocos elementos. Si el tiempo entre requests es bajo, no necesitas traerte muchos elementos. Por lo contrario subir el tiempo entre requests hace que te tengas que traer mas elementos para estar actualizado y no perder ninguno.
  • movementsGalicia.reverse() se puede reemplazar por leer el array al rev茅s y te evitas una operaci贸n costosa
  • El forEach lo pod茅s romper (break) cuando el movimientos.IndiceMovimiento < lastIndexMovement
  • El lastIndexMovement se te va a resetear si reinicias la app. Tendr铆a que quedar persistido en alg煤n lado (un redis, por ejemplo). De lo contrario cada vez que levantes la app te va a tirar los mensajes por todos los movimientos que te devuelve la API (que ya envi贸).
  • Faltan tests (?) JAJAJAJAJA

Excelente analisis.

@dcatanzaro

Copy link
Copy Markdown
Author
  • La cookie podr铆a estar en una variable de entorno
  • No tiene rate limiter la API del banco?
  • Habr铆a que averiguar si tiene paginado para traerte pocos elementos. Si el tiempo entre requests es bajo, no necesitas traerte muchos elementos. Por lo contrario subir el tiempo entre requests hace que te tengas que traer mas elementos para estar actualizado y no perder ninguno.
  • movementsGalicia.reverse() se puede reemplazar por leer el array al rev茅s y te evitas una operaci贸n costosa
  • El forEach lo pod茅s romper (break) cuando el movimientos.IndiceMovimiento < lastIndexMovement
  • El lastIndexMovement se te va a resetear si reinicias la app. Tendr铆a que quedar persistido en alg煤n lado (un redis, por ejemplo). De lo contrario cada vez que levantes la app te va a tirar los mensajes por todos los movimientos que te devuelve la API (que ya envi贸).
  • Faltan tests (?) JAJAJAJAJA

Hice el bot en 2 minutos, para mi caso me servia :P, al pedo darle complejidad a un botcito asi.

@rromero96

Copy link
Copy Markdown

buenas buenass, cual seria el nombre de la cookie del galicia que deberia capturar su valor? porque tengo varios je
Captura de Pantalla 2022-10-19 a la(s) 16 41 13

@amiotti

amiotti commented Oct 19, 2022

Copy link
Copy Markdown

buenas buenass, cual seria el nombre de la cookie del galicia que deberia capturar su valor? porque tengo varios je Captura de Pantalla 2022-10-19 a la(s) 16 41 13

document.cookie en la consola te trae todas... en string

@alejoamiras

Copy link
Copy Markdown

Hace unos meses empec茅 a hacer esto mismo y me distraje. Protip (?): si le peg谩s a cierto endpoint keepalive, el homebanking no cierra la sesi贸n nunca, y pod茅s seguir pidiendo este dato sin volver a loguearte.

Bue, me siento tan seguro en este momento 馃憖

@rromero96

rromero96 commented Oct 20, 2022

Copy link
Copy Markdown

si pongo lo que trae document.cookie la repsonse es = >

  data: {
    IsError: true,
    Model: {
      Codigo: 'NULLJSONEXCP',
      Descripcion: "Error en 'ErrorAjaxJSon', exception es null",
      CerrarSesion: false
    }
  }

a alguien le paso? como se soluciona?

@amiotti

amiotti commented Oct 21, 2022

Copy link
Copy Markdown

alguien lo hizo para el BBVA?

@yagopajarino

Copy link
Copy Markdown

alguien lo hizo para el BBVA?

https://github.com/yagopajarino/bot-bbva

馃殌

@amiotti

amiotti commented Oct 22, 2022

Copy link
Copy Markdown

alguien lo hizo para el BBVA?

https://github.com/yagopajarino/bot-bbva

馃殌

Muchas gracias!! Te puedo hacer una consulta?
En cookies mandas toda la cookie quw se genera cuando haces login o solo algunos valores??

@yagopajarino

Copy link
Copy Markdown

alguien lo hizo para el BBVA?

https://github.com/yagopajarino/bot-bbva
馃殌

Muchas gracias!! Te puedo hacer una consulta? En cookies mandas toda la cookie quw se genera cuando haces login o solo algunos valores??

Hola! Se la paso entera ;)

@amiotti

amiotti commented Oct 24, 2022

Copy link
Copy Markdown

alguien lo hizo para el BBVA?

https://github.com/yagopajarino/bot-bbva
馃殌

Muchas gracias!! Te puedo hacer una consulta? En cookies mandas toda la cookie quw se genera cuando haces login o solo algunos valores??

Hola! Se la paso entera ;)

tenes idea por que me puede tirar este error? le estoy pasando el 'x-xsrf-token' de la sesion..

data: 'Error 403: Expected CSRF token not found. Has your session expired?\n'

@yagopajarino

Copy link
Copy Markdown

Mandame un dm o un mail y lo vemos

alguien lo hizo para el BBVA?

https://github.com/yagopajarino/bot-bbva
馃殌

Muchas gracias!! Te puedo hacer una consulta? En cookies mandas toda la cookie quw se genera cuando haces login o solo algunos valores??

Hola! Se la paso entera ;)

tenes idea por que me puede tirar este error? le estoy pasando el 'x-xsrf-token' de la sesion..

data: 'Error 403: Expected CSRF token not found. Has your session expired?\n'

Mandame un dm por twitter o un mail y lo vemos

@estebanlis

Copy link
Copy Markdown

Muy bueno Damian! Alguien tiene idea si se puede hacer para Santander?
@tstambulsky

Reci茅n de curioso estuve chequeando, hay que adaptar algunas cositas pero se puede seguir la misma l贸gica tranquilamente

intente hacerlo para el santander y no me funcion贸.. si alguno lo hizo y lo quiere compartir, bienvenido ser谩..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment