Last active
January 24, 2022 07:43
-
-
Save s-nt-s/36b5c9a589075c39115fd2ad87406f53 to your computer and use it in GitHub Desktop.
Te avisa cuando hay una cita libre en https://autocitavacuna.sanidadmadrid.org/ohcitacovid
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
RECOMENDACION: 1º reserva manualmente la primera cita que veas que te valga para tener algo seguro, | |
y luego ve a 'modificar cita' y lanza este script para intentar encontrar algo mejor (no perderas la cita previa hasta que selecciones una nueva) | |
1- Ve a https://autocitavacuna.sanidadmadrid.org/ohcitacovid y navega hasta la pantalla de seleccion de hospital | |
2- Pulsa F12 | |
3- Ve a la pestaña consola | |
4- Pega el código y dale a ejecutar | |
5- Cuando encuentre una cita sonara "beep" tres veces y dejara de buscar | |
6- Si te convence lo que ha encontrado, seleccionalo y termina manualmente el proceso de reserva | |
Nota: Incrementa el número pasado como argumento en las llamadas a `sleep` si ves que necesitas que vaya mas lento. | |
Esto solo ha sido probado en Firefox. | |
Echale un vistazo al resto de comentarios (más abajo) para adaptarlo a tus necesidades. | |
*/ | |
function sleep(s) { | |
return new Promise(resolve => setTimeout(resolve, s*1000)); | |
} | |
async function beep(i) { | |
if (i==null) i=1; | |
var snd = new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU="); | |
while (i-->0) { | |
snd.play(); | |
if (i>0) await sleep(1); | |
} | |
} | |
function franja() { | |
const f = Array.from(new Set(Array.from(arguments).filter(function (n) { | |
if (n==null || isNaN(n)) return false; | |
return n>=0 && n<=24; | |
}).map(function(n) { | |
if (n<8) n=n+24; | |
n = n-8; | |
return Math.floor(n/2); | |
}))); | |
f.sort((a,b) => a-b); | |
return f; | |
} | |
jQuery.fn.txt = function() { | |
return this.map(function(){ | |
return this.textContent.trim(); | |
}).get(); | |
} | |
jQuery.fn.in = function() { | |
let args = Array.from(arguments); | |
let arg0 = args[0]; | |
if (args.length == 1 && typeof arg0 == "object") args = {"includes": function (num) { | |
return (num>=arg0.min && num<=arg0.max); | |
}}; | |
return this.filter(function(){ | |
let txt = this.textContent.trim(); | |
txt = parseFloat(txt.replace(":", "."), 10); | |
return args.includes(txt); | |
}); | |
}; | |
async function buscaCita() { | |
// Lanza window.stoploop = true si quieres abortar el bucle | |
// Solo mira el mes en curso, pero seria facil modificarlo para que mire más meses | |
let ctr=null; | |
const args = Array.from(arguments).map(x => x.toLowerCase()); | |
while (!window.stoploop) for (const c of args) { | |
if (window.stoploop) return; | |
if (ctr==null || arguments.length>1) { | |
jQuery("select:eq(0)").click(); | |
await sleep(1); | |
ctr = jQuery("ul.ui-dropdown-items li").filter(function(){ | |
return this.textContent.toLowerCase().indexOf(c)>=0; | |
}).click().text().trim(); | |
console.log(ctr); | |
await sleep(1); | |
} | |
// Si se pone solo un hospital, sera necesario poner al menos 2 franjas horarias | |
// Horarios desde 8am a 2am del día siguiente (cambiar si se quiere otras horas) | |
for (const i of franja(8, 10, 12, 14, 16, 18, 20, 22, 0)) { | |
if (window.stoploop) return; | |
jQuery("select:eq(1)").click(); | |
await sleep(1); | |
const hr = jQuery("ul.ui-dropdown-items li").eq(i).click().text().trim(); | |
console.log(ctr+" "+hr); | |
await sleep(2); | |
let ok=jQuery("table.ui-datepicker-calendar a.ng-star-inserted:not(.ui-state-disabled)"); | |
// Filtrar los días encontrados si se quiere acotar por fecha, ej: | |
// ok = ok.in(1, 2, 3, 4); | |
if (ok.length) { | |
// Se ha encontrado al menos un día con citas libres | |
beep(3); | |
return; | |
} | |
} | |
} | |
} | |
window.stoploop = false; | |
// Poner los nombres (no hace falta que esten completos) de los hospitales que te interesen | |
buscaCita("12 de octubre", "niño jesus", "cruz roja", "wizink", "villaverde", "alcorcon", "princesa", "carlos", "gregorio", "jimenez diaz", "santa cristina", "zendal"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment