Is door middel van rail op tijd?

Persoonlijk ben ik een fan van treinen. Ze zijn een leuke, zij het traag, methode om het land te overwinnen. Canada is niet de allerbeste kandidaat voor spoorwegbeheer, op voorwaarde dat het vrij grote gebied tussen kusten, maar door middel van rail werkt de routine-treindienst in hun gang tussen Windsor en Quebec City.

Helaas moet de reizigersail op de industrielrail produceren in Canada, wat vaak vertragingen veroorzaakt. Na het opmerken dat sommige treinen extreem regelmatige vertragingen hebben, leek het erop dat het gunstig zou zijn om de typische prestaties van elk te begrijpen door middel van trein. door middel van middelen levert deze gegevens niet openbaar.

Ze leveren echter wel enkele gegevens over aankomst en vertrektijden. Graven in de aangeboden gegevens met elk type browser dat het door middel van de railsite controleert, was het mogelijk om te vragen voor geplande / daadwerkelijke aankomstgegevens. Het resultaat is trainstats.ca, een scherm van VIA’s tijdig prestaties. Doe mee na de pauze terwijl ik precies ga, hoe dit allemaal werkt, evenals precies hoe een kampioen te kiezen bij het krijgen van je volgende treinkaartje.

De gegevens krijgen

VIA VIERTE DOE DOEN ROUTINE-gegevens voor de vorige, stroom, evenals de volgende dag op hun toestandpagina. Dit zou ons een reeks reisgegevens ontwikkelen, maar slechts op een dag tegelijk. Gelukkig kunnen we de inspecteur van Chrome beëindigen, evenals ontdekken dit ontvangen verzoek:

http://reservia.viarail.ca/tsi/getTrainstatus.aspx?l=en&tsiccode=via&tsitrainnumber=87&departuredate=2015-12-01&-017-22015-12-01&traininstancedate=2015-12-01&t=1449033500354

Er zijn hier een paar sappige parameters. Tsitrainnummer is ongetwijfeld het treinnummer waar we naar kijken. Vertrek is de datum waarop de trein is vertrokken, evenals aankomstdatum is wanneer het aankwam. TrainInstancedAns lijkt eveneens op de datum waarop de trein naar boven is gegaan. Met dit in gedachten is het tijd om in Python te springen en de verbazingwekkende aanvragenbibliotheek te gebruiken om enkele verzoeken te maken.

Deze gegevens bestaan ​​uit bidirectionele Unicode-tekst die op een andere manier kunnen worden geïnterpreteerd of gecompileerd dan wat hieronder verschijnt. Om de gegevens in een editor te bekijken, die verborgen Unicode-tekens blootstellen.
Ontdek veel meer over bidirectionele Unicode-tekens

Toon verborgen karakters

payload = {‘l’: ‘en’,

‘Tsiccode’: ‘Via’,

‘Tsitrainnumber’: train_number,

‘Vertrek’: Trip_date,

‘Aankomstdatum’: trip_date,

‘TrainInstancedate’: trip_date}

r = requests.get (‘http://reservia.viarail.ca/tsi/getstrainstatus.aspx'

Params = Payload)

Bekijk rauw

aanvraag. Py

gehouden door GitHub

Met deze code kunnen we gegevens ophalen voor elk type treinnummer op elk type datum. Na wat testen ontdekten we dat via’s gegevens teruggaan naar april 2015, wat ons meer dan 6 maanden gegevens biedt. Voor elke reis krijgen we de gearrangeerde en daadwerkelijke aankomst evenals vertrektijden voor elk station. Die informatie houden, kunnen we snel bepalen hoe vertraagd de treinen zijn.

Met de pagina-gegevens die als HTML zijn opgehaald, werd een script samen gehackt met behulp van BeautifulSoup om alle waarden te extraheren. Dit script produceert vervolgens objecten voor de reisgegevens en slaat ze op in een PostGresql-database met behulp van Sqlalchemy. Dit maakt het eenvoudig en effectief om toegang te krijgen tot de gegevens later.

De laatste stap was om te herhalen over alle treinnummers en dagen om de gegevens te trekken. Dit script gebruikt gewoon enkele geneste lussen om de gegevens te krijgen en op te slaan. Nog een script grijpt de gegevens van de vorige dag en slaat het op in de database. Dit is opgezet op een cron-taak, dus de database blijft vers.

Een (goedkope) website bouwen

treinstats.ca website
Op dit punt hebben we aankomstgegevens op meer dan 12.000 reizen. Hoewel we vragen kunnen uitvoeren en scripts samenstellen om percelen te produceren, is het veel leuker om de gegevens online te plaatsen. Dat geeft aan dat het tijd is om een ​​website te ontwikkelen. Het maken van dingen er geweldig uitzien op het web is niet mijn forte, dus [Phil Everson] sprong erin om wat webontwikkeling te doen.

Om een ​​beperking toe te voegen, wilden we de site zo betaalbaar mogelijk maken om te rennen. Platform als servicepod zoals Heroku rende ongeveer $ 20 per maand. Een online persoonlijke server van Digitalocean zou ten minste $ 5 kosten. De minst dure keuze was om een ​​statische site te maken.

Een statische webpagina is een reis terug naar de dagen van geosities. U kunt bestanden houden, maar kan geen enkele verwerking op de server doen. Gelukkig werkte dit goed voor het soort gegevens dat we aanbieden. Alle geaggregeerde reisgegevens kunnen worden geëxporteerd naar JSON-bestanden, evenals JavaScript aan de clientzijde kunnen zowel de gegevens als schermplotten ton.

De Trainstats-site bestaat uit sommige HTML, CSS, evenals Javascript die in uw browser wordt uitgevoerd, evenals een verzameling JSON-gegevens met de gegevens. De dataset wordt dagelijks gegenereerddoor een meer cron-taak, waarmee alle verwerking in één keer op een regionale computer kan plaatsvinden. Dan wordt de opdrachtregelinterface van Amazon Web Services gebruikt om de gegevens naar S3 te duwen, waar het door gebruikers kan worden opgehaald. Omdat de datasets klein zijn, evenals S3 goedkoop is, maakt dit de kosten lager dan normale hosting.

De resultaten

Deze hack is voornamelijk ontwikkeld voor de lol, maar het heeft een paar fascinerende bevindingen. Op mijn normale Ottawa naar Toronto-route, ik heb veel meer kans om de trein te selecteren die tijdig 84% van de tijd is, versus degene die alleen zonder vertraging op 28% van de tochten in het station rolt. Sommige andere reizigers kunnen de statistieken ook voordelig ontdekken. Hoe dan ook, het was een fascinerende oefeningen bij het schrapen van een dataset en het leveren van een webservice op het goedkoop.

Als je aan de bron denkt, is het allemaal op Github voor het nemen. We verzoeken u vriendelijk dat u niet door middel van rail ermee DDOS kunt.

Leave a Reply

Your email address will not be published. Required fields are marked *