Personalmente, soy fan de los trenes. Son un método bueno, aunque lento, para moverse por todo el país. Canadá no es el mejor candidato para el tránsito ferroviario, siempre que el área bastante grande entre las costas, sin embargo, a través de Rail, opere el servicio de trenes de rutina en su corredor entre Windsor, así como la ciudad de Quebec.
Desafortunadamente, Traveler Rail tiene que producir al riel industrial en Canadá que comúnmente se desencadena los retrasos. Después de notar que algunos trenes tienen retrasos extremadamente regulares, parecía que sería beneficioso entender el desempeño típico de cada uno por medio del tren. Por medio de no suministra públicamente estos datos.
Sin embargo, sí suministran algunos datos sobre la llegada, así como los horarios de salida. Cavando en los datos ofrecidos con cualquier tipo de navegador que revisa el sitio de ferrocarril, fue posible consultar para los datos de llegada programados / reales anteriores. El resultado es TrainStats.ca, una pantalla de Vías de manera oportuna. Únase a mí después del descanso, ya que voy exactamente cómo funciona todo esto, así como exactamente cómo elegir un campeón al obtener su próximo boleto de tren.
Obteniendo los datos
A través de los datos de rutina de suministro para la anterior, actual, así como el día siguiente en su página de condición. Esto nos permitiría desarrollar un conjunto de datos de viaje, sin embargo, solo algún día a la vez. Afortunadamente, podemos terminar el inspector de Chrome, así como descubrir esta solicitud de obtención:
http://reservia.viarail.ca/tsi/gettrainstatus.aspx?l=en&tsiccode=via&tsitrainnumn=87&departuredate=2015-12-01&arrivaldate=2015-12-01&traininstedate=2015-12-01&t=1449033500354
Hay algunos parámetros jugosos aquí. TsitrainNumber es, sin duda, el número de tren que estamos mirando. El departamento es la fecha en que la izquierda del tren, así como la fecha de llegada es cuando llegó. TrainInstangeDate también parece estar configurado en la fecha en que se fue el tren. Con esto en mente, es hora de saltar a Python, así como utilizar la increíble biblioteca de solicitudes para crear algunas solicitudes.
Estos datos consisten en un texto bidireccional Unicode que se puede interpretar o compilar de una manera diferente a lo que aparece a continuación. Para revisar, abra los datos en un editor que expone caracteres ocultos Unicode.
Descubre mucho más sobre los caracteres bidireccionales de Unicode
mostrar personajes ocultos
Payload = {‘l’: ‘es’,
‘Tsiccode’: ‘vía’,
‘Tsitrainnumber’: train_number,
‘SIMURADO’: trip_date,
‘LlegadaDate’: Trip_date,
‘TrainInstangeate’: trip_date}
r = Solicitudes. (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx' ;,
params = carga útil)
crudo
solicitud
sostenido por GitHub
Este código nos permite buscar datos para cualquier tipo de número de tren en cualquier tipo de fecha. Después de algunas pruebas, descubrimos que los datos de VIA se remontan a abril de 2015, lo que nos proporciona más de 6 meses de datos. Para cada viaje, obtenemos lo arreglado, así como la llegada real, así como los horarios de salida para cada estación. Manteniendo esa información, podemos determinar rápidamente cuán retrasados son los trenes.
Con los datos de la página Fetched como HTML, un script se pirateó usando BeautifulSoup para extraer todos los valores. Este script produce objetos para los datos de viaje, así como los almacena en una base de datos PostgreSQL utilizando SQLALCHEMY. Esto lo hace simple, así como lo efectivo para acceder a los datos más adelante.
El último paso fue iterar en todos los números de trenes, así como días para sacar los datos. Este script solo utiliza algunos bucles anidados para obtener los datos, así como de la tienda. Un script más agarra los datos del día anterior, así como la almacena en la base de datos. Esto se configura en un trabajo de Cron, por lo que la base de datos se mantiene fresca.
Construyendo un sitio web (barato)
TrainStats.ca sitio web
En este punto, tenemos datos de llegada sobre más de 12,000 viajes. Si bien podemos ejecutar manualmente las consultas, así como componer scripts para producir parcelas, es mucho más divertido poner los datos en línea. Eso indica que es hora de desarrollar un sitio web. Hacer que las cosas se vean geniales en la web no es mi Forte, por lo que [Phil Everson] saltó para hacer un desarrollo web.
Para agregar una restricción, deseamos hacer que el sitio sea lo más asequible posible para ejecutar. La plataforma como ofrendas de servicio como Heroku corrió alrededor de $ 20 al mes. Un servidor personal en línea de DIGITALOCEAN gastaría al menos $ 5. La opción menos costosa fue hacer un sitio estático.
Una página web estática es un viaje de regreso a los días de las geocidades. Puede realizar archivos, sin embargo, no puede realizar ningún tipo de procesamiento en el servidor. Afortunadamente, esto funcionó bien para el tipo de datos que estábamos proporcionando. Todos los datos de disparo agregados pueden ser exportados a archivos JSON, así como JavaScript en el lado del cliente, pueden toneladas los datos, así como las parcelas de pantalla.
El sitio de TrainStats consiste en algunos HTML, CSS, así como JavaScript que se ejecuta en su navegador, así como una colección de datos JSON con los datos. El conjunto de datos se genera diariamente.por un trabajo más Cron, que permite que se produzca todo el procesamiento en uno. Luego, se utiliza la interfaz de línea de comandos de Amazon Web Services para presionar los datos a S3, donde puede ser recuperado por los usuarios. Dado que los conjuntos de datos son pequeños, así como S3 son baratos, esto hace que los costos sean más bajos que el alojamiento normal.
Los resultados
Este truco se desarrolló principalmente por diversión, sin embargo, tiene algunos hallazgos fascinantes. En mi Ruta Normal de Ottawa a Toronto, es mucho más probable que seleccione el tren de manera oportuna el 84% del tiempo, en comparación con la que solo rueda a la estación sin demora en el 28% de los viajes. Algunos otros viajeros también pueden descubrir las estadísticas beneficiosas también. De cualquier manera, fue un ejercicio fascinante para raspar un conjunto de datos, así como suministrar un servicio web a lo barato.
Si está pensando en la fuente, todo está en GitHub para tomar. Solicítamos amablemente que no lo hagas por medio de carril con él.