Turno con el Doctor!🧑⚕️
Intro
Después de muchos años sin hacerlo, decidí concurrir a un control cardiológico, el médico me recetó una serie de estudios. Una vez que hice los estudios, necesitaba volver al cardiólogo para mostrarle los resultados.
El problema fue que la próxima fecha disponible para visitarlo era dentro de un mes, lo que no era ideal para mí. Supuse que quizás podía liberarse un turno antes, pero para enterarme debía entrar todos los días a la página web (de donde se emiten los turnos) para consultar si había algún turno nuevo con una fecha más próxima.
Es entonces cuando decidí utilizar la automatización para agilizar el proceso.
Mi idea era obtener automáticamente el próximo turno disponible y compararlo con el turno que ya había sacado. Si el turno disponible era una fecha anterior, recibiría una alerta en mi celular y podría ingresar a la página web para obtener el turno.
Obteniendo los datos
La primera parte del proceso era obtener automáticamente el próximo turno disponible.
Pensé en hacerlo de manera básica, por lo que lo primero que hice fue obtener el código HTML de la página web utilizando la biblioteca requests
de Python. Luego, intenté buscar la parte pertinente del código que contenía la información del próximo turno disponible.
Sin embargo, tuve un problema, ya que el HTML no contenía el dato que estaba buscando 😓.
Después de investigar, descubrí que la página web utiliza técnicas de carga dinámica para mostrar información actualizada. En este caso, la página se actualizaba automáticamente después de unos segundos para mostrar el próximo turno disponible. Como resultado, el HTML que había obtenido no contenía la información que necesitaba. En su lugar, habia una etiqueta que luego sería reemplazada por el turno una vez que se ejecutara la función.
Para superar este problema, investigué si había una API oculta que pudiera proporcionar la información que necesitaba. Abrí el inspector de la página web y recargué la página para que llamadas se ejecutaban por detras.
Encontré que había un endpoint al que se llamaba con el código del profesional para obtener el próximo turno disponible.
Una vez que encontré el endpoint, todo lo que tuve que hacer fue copiar el request como un curl y luego convertirlo en código de Python. Para ello, utilicé la herramienta https://curlconverter.com/ que proporciona un código Python válido que hace la misma solicitud que el comando curl.:
Finalmente, hacer la llamada request, poniendo en el "data" el id del doctor del cual necesitaba el turno.
Obtenido el resultado, ver cual era el próximo turno disponible. Comparar esa fecha con la del turno que había obtenido yo en un principio. Si se había liberado un turno antes, el script tenía que notificarme al celular.
Notificando al celular
Ahora tenía que ver de qué forma podía notificarme al celular que se había liberado un turno.
Rápidamente, y gracias al post “Python — Sending Push Notifications To Your Phone” encontré que existe una aplicación llamada myNotifier. Que en su versión gratuita te permite enviar 25 notificaciones al mes. Más que suficiente!!
La aplicación es muy simple: Te registras en la web e instalas la aplicación en tu celular.
Luego solo resta enviar un request a su api con tu api_key y el mensaje.
Luego, a correr el script! $ python3 notificacion_turno_disponible.py
Y así fue como, un buen día, alguien decidió cancelar su turno. Y el script pudo detectarlo y avisarme antes que otra persona lo reserve 🙌
Subscribe to my newsletter
Read articles from Emiliano Gorr directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Emiliano Gorr
Emiliano Gorr
Computer scientist / Full Stack Data Scientist