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);
@nachooliva15
Copy link
Copy Markdown

nachooliva15 commented Oct 18, 2022

Pregunta, no deberias actualizar las cookies cada vez que se caduquen?

@Zhinon
Copy link
Copy Markdown

Zhinon commented Oct 18, 2022

Gracias! 馃憦 馃憦 馃憦

@dante-militello
Copy link
Copy Markdown

Pregunta, no deberias actualizar las cookies cada vez que se caduquen?

misma pregunta, hacia un extractor de cookie simulando el login con selenium

@MartinCura
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.

@fergek
Copy link
Copy Markdown

fergek commented Oct 18, 2022

Hola @dcatanzaro .
Vos sab茅s que miro esto para arriba y para abajo y no me termino de dar cuenta en d贸nde le dec铆s que traiga los datos de TU cuenta. Cuando puedas, me cont谩s c贸mo lo est谩s haciendo?

Gracias!

@andresgardiol
Copy link
Copy Markdown

andresgardiol commented Oct 18, 2022

Hola @dcatanzaro . Vos sab茅s que miro esto para arriba y para abajo y no me termino de dar cuenta en d贸nde le dec铆s que traiga los datos de TU cuenta. Cuando puedas, me cont谩s c贸mo lo est谩s haciendo?

Gracias!

Entiendo que de las cookies no?

@marianore-beepboop
Copy link
Copy Markdown

Sale repo donde adicionemos los dem谩s bancos?

@santigandolfo
Copy link
Copy Markdown

Para mandar el request a trav茅s de la API de Telegram, est谩 bien que sea un GET en vez de un POST? O es indiferente?

@GabiAle97
Copy link
Copy Markdown

Sale repo donde adicionemos los dem谩s bancos?

Estar铆a genial

@amiotti
Copy link
Copy Markdown

amiotti commented Oct 19, 2022

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
Copy link
Copy Markdown

luxarts commented Oct 19, 2022

  • 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
Copy link
Copy Markdown

amiotti commented Oct 19, 2022

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
Copy link
Copy Markdown

rromero96 commented Oct 20, 2022

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
Copy link
Copy Markdown

amiotti commented Oct 21, 2022

alguien lo hizo para el BBVA?

@yagopajarino
Copy link
Copy Markdown

alguien lo hizo para el BBVA?

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

馃殌

@amiotti
Copy link
Copy Markdown

amiotti commented Oct 22, 2022

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
Copy link
Copy Markdown

amiotti commented Oct 24, 2022

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