Cloudflare Worker: Tiempos estimados EMT Madrid

Los códigos QR de información de la EMT Madrid dejaron de funcionar. He hecho una web en la que es posible consultar la información de la parada. Todo con un sencillo 'worker' de Cloudflare.

Cloudflare Worker: Tiempos estimados EMT Madrid

El problema

De repente, un día dejaron de funcionar los códigos QR que había en las paradas de la EMT Madrid para consultar las frecuencias de los buses.

Así lo reportaba el usuario @giraldeo en Twitter:

Tweet del usuario @giraldeo en el que se expone el problema con los códigos QR

La explicación técnica

Parece ser que en vez de generar los códigos QR apuntando a un dominio ("una web") bajo su control, lo externalizaron.

Una imagen de terminal en la que se puede ver como la dirección a la que resuelve el QR mostrado rechaza la conexión.

Personalmente no entiendo la razón para contratar a una empresa externa para esto... Estoy seguro de que el equipo de IT de la EMT es muy capaz y simplemente les han puenteado. 🙄

Y no es por nada, pero estamos hablando, parece, de una empresa ¡francesa! Jopé con los más patrióticos del mundo, en cuanto pueden...

🔎
Llevo desde diciembre de 2022 (actualizo esto en mayo de 2023) detrás de la EMT y el Ayuntamiento de Madrid para que me expliquen los motivos técnicos y los detalles de la licitación. He tenido que reclamar al Consejo de Transparencia porque me lo han negado. ¡Actualizaré!

La solución propuesta

Por si a alguien le sirve, he creado rápidamente esta web que te redirige a la pantallita de la EMT con los tiempos estimados para la parada que le indiquemos.

Es súper sencilla: basta con escribir "emt.glez.cloud/" y el código de parada a continuación.

emt.glez.cloud/COD_PARADA

Al hacerlo, la web redirigirá al usuario a una web YA EXISTENTE de la EMT Madrid en la que consultar los tiempos de espera aproximados para la parada indicada:

Crítica, ¿constructiva?

Lo que he hecho es una absurda tontería. No llega a las 15 líneas de código, no requiere equipos al ser serverless, funciona con desarrollos ya existentes de la EMT Madrid. Sí, hay coste de impresión de los códigos QR, pero no mucho más.

Sigo peleando para que la EMT y el Ayuntamiento de Madrid me faciliten los datos de la licitación, así como la "explicación técnica del error" y los motivos para externalizar el servicio.

Tras más de 6 meses para arriba y para abajo, sigo sin tener respuesta. Esto, como ciudadanos/as, es una pena. Y es un problema.

Este script es una prueba de concepto: como algo sencillo puede ayudar mucho y lo difícil que parece cuando lo hace la Administración. O los políticos, lo que sea aplicable en este caso.

Código del Cloudflare Worker

async function handleRequest(stop_requested) {
  if (stop_requested > 1 && stop_requested < 99999) {
    console.log("OK - " + stop_requested)
    const destinationURL = 'https://www.emtmadrid.es/PMVVisor/pmv.aspx?stopnum=' + stop_requested + '&size=3&utm_source=pglez';
    return Response.redirect(destinationURL, 302);
  } else {
    console.log("NOK - " + stop_requested)
    const html = `<html> <head> <meta charset="utf-8"> <title>Visor de tiempos EMT</title> <style>body{font-family: 'Open Sans', 'Helvetica Neue', sans-serif;}img{max-width: 100vw; max-height: 100vw;}</style> </head> <body> <h1>Error en la petición</h1> <h2>Introduzca únicamente el número de parada como parámetro</h2> <br><img src="https://pub-e7a754c25f58400c88dabdb9d5a5b990.r2.dev/banner_emt_glez.png" alt="Imagen de ejemplo"> </body></html>`
    return new Response(html, {
      headers: {
        'content-type': 'text/html;charset=UTF-8',},})}}
addEventListener('fetch', event => {
  var request = event.request
  var int_url = new URL(request.url);
  var int_pathname = int_url.pathname.slice(1)
  return event.respondWith(handleRequest(int_pathname));});

También disponible en este Gist de GitHub.


¿Alguna duda?

No dudes en ponerte en contacto conmigo para cualquier duda, sugerencia, queja o aclaración que creas necesaria. ¡Será un placer hablar contigo!