Saltar a contenido

Urbano de Ourense

El transporte urbano de Ourense consiste en un servicio de autobuses urbanos prestado por Avanza, en régimen de concesión por parte del Concello de Ourense, en precario desde 2015.

Datos estáticos

Los datos de las líneas de autobuses urbanos de Ourense se pueden obtener en formato GTFS desde su propia web o desde el NAP del Ministerio de Transportes y Movilidad Sostenible. La URL del dataset es https://ourense.avanzagrupo.com/gt/gtfs-urbano-ourense.zip, sin necesidad de autenticación, en el caso del de su web o https://nap.transportes.gob.es/Files/Detail/1387, en el caso del ofrecido en el NAP.

Aviso

Los datos de GTFS de Avanza Ourense están completamente desactualizados, presentando información errónea con líneas antiguas y horarios que no aplican en los días correspondientes (nocturnos y servicios especiales).

Datos en tiempo real

No existe un feed público en un formato estándar (como lo son GTFS-RealTime o SIRI) para acceder a las estimaciones de llegada de los autobuses urbanos en tiempo real. Por tanto, no hay forma de obtener las estimaciones de llegadas a las paradas, ni alertas de servicio ni posiciones de los vehículos.

La única forma de acceder a estos datos (de manera individualizada) es aprovechando distintas API del Concello de Ourense, extraídas de los QRs de las paradas

Scraping

De manera alternativa, se pueden obtener los datos de avisos y tiempo real mediante Web Scraping, muy similar a la API de Vitrasa.

Avisos

La URL es https://ourense.avanzagrupo.com/avisos y el HTML de los avisos se puede obtener, por ejemplo, con el siguiente JavaScript:

document
    .querySelectorAll("#v-pills-tabContent .tab-pane")
    .values()
    .map(p => p.innerHTML)

Estimaciones de una parada

La URL es https://consultasqrou.avanzagrupo.com/default.aspx/?parada=45 , cambiando "parada" por el ID de la parada a consultar. Para sacar las estimaciones, se puede usar, por ejemplo, este JavaScript:

document.querySelectorAll("#GridView1 > tbody > tr")
    .values()
    .map(tr => tr.querySelectorAll("td"))
    .filter(l => l.length === 3)

Es importante filtrar los td donde solo hay tres elementos, porque la "UI" utiliza tablas para todo el diseño, incluyendo la paginación en la parte inferior. Esos tres elementos corresponden, en este orden a "linea", "ruta", "minutos".

Nota

Usar la paginación es posible, pero complicado, ya que hay que procesar la primera página, y sacar variables como ViewState, y hacer un POST para obtenerla. Por ello, es mucho más sencillo y eficiente usar la API descrita anteriormente.