CFR SA, la empresa nacional rumana de administración de infraestructura ferroviaria, ofrece un servicio de información en vivo en línea (basado en formularios ASPX con envío de estado de visualización de devolución de datos y validación de eventos) para obtener datos casi en tiempo real sobre salidas, llegadas y andenes donde llegan los trenes a las estaciones y retrasos en los viajes. y actualizaciones. En ese momento, todo este sistema carece de API o incluso de una interfaz decente, fácil de usar y fácil de encontrar para los usuarios finales.
Esta API basada en Flask extrae datos de la aplicación web CFR según lo solicitado en el punto final de la API de URL y genera datos JSON reutilizables. El programa extrae toda su información de la variable __VIEWSTATE de ASP.Net.
Necesita Python 3.6+ y Pipenv instalados en su sistema.
$ apto instalar python3 python3-pip $ pip3 instalar pipenv
Clona el repositorio e instala las dependencias del módulo:
$ git clon https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-rascador-iris $ instalación de pipenv
Ejecute el servidor API como se especifica en la documentación de Flask.
$ pipenv ejecutar matraz ejecutar
Es posible que deba editar el archivo Pipfile para que coincida con su versión local de Python para poder instalarlo correctamente.
python_version = "3.6.9"
Flask escucha de forma predeterminada solo las solicitudes locales. Es recomendable mantenerlo así e instalar un proxy inverso para implementaciones más grandes, pero para acceder a su máquina de prueba desde LAN, ejecute con:
$ pipenv ejecutar matraz ejecutar --host 0.0.0.0
Esto se vinculará en todas las interfaces disponibles.
Ahora puedes apuntar tu navegador a http://localhost:5000/station/ID para ver la magia. ID es el código único de estación-unidad; el punto final http://localhost:5000/get-stations/ proporciona una lista.
Por ejemplo, para obtener un objeto JSON con la tabla de salida/llegada actual y la información de retrasos para la estación de tren Bucarest Norte (la principal y más grande de nuestro país), deberá apuntar su navegador o la variable URL a cualquier aplicación que esté consumiendo. los datos con a: http://localhost:5000/station/10017.
De la misma manera que puede obtener los trenes actuales en una determinada estación de tren, puede obtener la información actual de un determinado tren. CFR proporciona información como retrasos, la última estación por la que pasó el tren (con un retraso de 7 minutos), la siguiente estación y otra información útil.
Simplemente apunte su navegador a http://localhost:5000/train/ID, donde ID es el número único del tren. Puede obtener estas identificaciones en la fuente de información de la estación. Por ejemplo, puede recuperar la información del tren IR 1651 de Bucarest Norte a Suceava Norte (válido a partir de abril de 2017) accediendo a http://localhost:5000/train/1651.
También hay un cliente web incluido con la API. Dirígete a http://localhost:5000/static/station.html, http://localhost:5000/static/train.html o http://localhost:5000/static/train.html?tren=9351 (tren predefinido número) para verlo.
Si bien las aplicaciones oficiales funcionan pero pueden no verse tan bien, los desarrolladores rumanos hicieron todo lo posible para crear algunos proyectos de código abierto y servicios en línea realmente interesantes relacionados con el transporte y la infraestructura. Vea este mapa en vivo, este conversor propietario a GTFS, este planificador de viajes, etc.
Con esta API y otros recursos públicos, puede crear su propio estilo de tablero de salida de estación, servicio de notificación de retrasos y aplicación móvil atractiva, mientras aprende a programar y trabajar con datos estructurados.
Este es un proyecto de código completamente abierto, construido sobre módulos y bibliotecas de código abierto y con licencia de Do What the Fuck You Want to Public License Versión 2.
Además, usted es completamente responsable de lo que hace con él; tenga en cuenta que CFR SA e InfoFer (la empresa de TI propiedad de los ferrocarriles estatales que desarrolla su software) no son particularmente transparentes ni amigables con los desarrolladores externos. Si realiza un scraping masivo o desarrolla algún servicio de acceso público que genera una gran cantidad de tráfico desde el mismo servidor hacia ellos o clona sus datos en una base de datos por diversas razones, puede tener algunos problemas, como le ocurrió a este compañero entusiasta mientras creaba una web. planificador de viajes utilizando el horario de CFR Calatori de su sitio web.
Pero para jugar, jugar y trabajar con datos en tiempo real que claramente no pueden confundir a nadie si el error no proviene del propio CFR, debería estar bien y estar en el lado correcto de la ley, al menos desde mi experiencia. Quizás en algún momento ofrezcan su propia API con reglas y licencias adecuadas.
Las solicitudes no están autenticadas y no se implementa ninguna limitación de velocidad, por lo que de ninguna manera está lista para ser expuesta en la web.
Esto no es particularmente rápido, porque la página web del CFR tampoco lo es. Probablemente querrás solicitudes en segundo plano y almacenamiento en caché. Después de realizar la solicitud inicial, esperará 8 segundos antes de analizar los datos. Si los datos no se han mostrado en la página web, esperará 20 segundos adicionales. Después de esto, la API generará un objeto en blanco; esto puede significar que el servicio web extraído no funciona, que responde muy lentamente o que realmente no hay viajes actuales que se detengan en esa estación en particular (por la noche o en una parada pequeña, por ejemplo). ejemplo). Corregido: si la API no funciona, obtendrás un estado de error 5xx.
Esto es raspado y análisis, por lo que cualquier actualización estructural de la página web del CFR, aunque es muy poco probable que se produzca en un futuro próximo, puede romper esto.
El feed de información del tren no proporciona detalles sobre los retrasos del tren y otra información útil que Infofer ofrece con su servicio. Esto se actualizará en el futuro. Corregido: toda la información pública de IRIS se genera en esta API.
Servicio web de información pública proporcionado por CFR SA a través de Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx. Se trata de información de la administración de infraestructuras y no de un transportista de pasajeros específico. Los horarios oficiales de pasajeros se encuentran aquí: http://mersultrenurilor.infofer.ro, y la fuente de datos XML estática con horarios actualizados al final de cada año: http://data.gov.ro/organization/sc-informatica-feroviara- sa