-
Star
(100)
You must be signed in to star a gist -
Fork
(9)
You must be signed in to fork a gist
-
-
Save dcatanzaro/5fc1bbd4753403305be7543d28b2eddf to your computer and use it in GitHub Desktop.
| 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); |
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
Muy bueno Damian!
Alguien tiene idea si se puede hacer para Santander?
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
驴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.
- 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
forEachlo pod茅s romper (break) cuando elmovimientos.IndiceMovimiento < lastIndexMovement - El
lastIndexMovementse 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
- 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
forEachlo pod茅s romper (break) cuando elmovimientos.IndiceMovimiento < lastIndexMovement- El
lastIndexMovementse 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.
- 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
forEachlo pod茅s romper (break) cuando elmovimientos.IndiceMovimiento < lastIndexMovement- El
lastIndexMovementse 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.
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 馃憖
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?
alguien lo hizo para el BBVA?
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??
alguien lo hizo para el 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 ;)
alguien lo hizo para el 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 o un mail y lo vemos
alguien lo hizo para el 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
Muy bueno Damian! Alguien tiene idea si se puede hacer para Santander?
@tstambulskyReci茅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谩..

como puedo descargarlo y empezar a usarlo?