Jest za pośrednictwem szyny na czas?
osobiście jestem fanem pociągów. Są miły, choć powolny, metodę, aby przejść do kraju. Kanada nie jest najlepszym kandydatem do tranzytu szynowego, pod warunkiem, że raczej duży obszar między wybrzeżami, jednak za pomocą szyny obsługuje rutynową obsługę pociągu w korytarzu między Windsorem, a także Quebec City.
Niestety, Rail Traveller musi wyprodukować do szyny przemysłowej w Kanadzie, które często wyzwala opóźnienia. Po zauważył, że niektóre pociągi mają bardzo regularne opóźnienia, wydawało się, że byłoby korzystne, aby zrozumieć typową wydajność każdego za pomocą pociągu. Za pomocą nie dostarcza tych danych publicznie.
Jednak dostarczają pewne dane o przyjeździe, a także czasy wyjazdu. Kierowanie do danych oferowanych z dowolnym typem przeglądarki sprawdzającą za pomocą lokalizacji kolejowej, można było zapytać o przeszłe zaplanowane / rzeczywiste dane przyjazdu. Rezultatem jest Trainstats.ca, ekran Via w odpowiednim czasie wydajności. Dołącz do mnie po przerwie, jak idę dokładnie, jak to wszystko działa, a dokładnie, jak wybrać mistrz podczas uzyskania następnego biletu kolejowego.
Uzyskiwanie danych.
Via oferuje rutynowe dane dotyczące poprzedniego, prądu, a także następnego dnia na ich stronie. To pozwoli nam opracować zestaw danych wyjazdowych, jednak pewnego dnia na raz. Na szczęście możemy zakończyć inspektor Chrome, a także odkryć, że otrzymasz żądanie:
http://reservia.vireail.ca/tsi/gettrainstatus.aspx?l=en&tsiccode=via&tsitrainnibernumber=87&departuredate=2015-12-01&arraldate=2015-12-01&trainintanTate=2015-12-01&t=1449033500354.
Jest tu kilka soczystych parametrów. Tsitrain Number jest niewątpliwie numer pociągiem, na który patrzymy. Odejście jest datą, w którym pojawi się pociąg, a także przybył. TrainInstrudate Również wydaje się być ustawiony na datę pozostawienia pociągu. Mając to na uwadze, nadszedł czas, aby wskoczyć do Pythona, a także wykorzystać niesamowitą bibliotekę żądań, aby utworzyć niektóre żądania.
Dane te składają się z dwukierunkowego tekstu Unicode, który może być interpretowany lub skompilowany w inny sposób niż na poniższym miejscu. Aby przejrzeć, otwórz dane w edytorze, który eksponuje ukryte znaki Unicode.
Odkryj dużo więcej o dwukierunkowych znakach Unicode
Pokaż ukryte znaki
Payload = {‘L’: “EN”,
“Tsiccode”: “Via”,
“Tsitrain Number”: Train_Number,
“Odejście”: trip_date,
“Arrivaldate”: Trip_date,
“TrainInstanceate”: trip_date}
r = prośbys.get (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx' ;,
params = ładunek)
Widok surowy
prośba.py.py.
trzymany przez GitHub
Kod ten umożliwia nam pobieranie danych dla każdego rodzaju numeru pociągu w dowolnym rodzaju daty. Po pewnych testach odkryliśmy, że dane VIA wraca do kwietnia 2015 r., Co zapewnia nam ponad 6 miesięcy danych. Za każdą wycieczkę otrzymujemy zorganizowane, a także rzeczywiste przybycie, a także czasy wyjazdu na każdą stację. Utrzymywanie tych informacji, możemy szybko określić, jak opóźnione są pociągi.
Za pomocą danych strony pobieranych jako HTML, skrypt został zhakowany razem za pomocą pięknejSoup, aby wyodrębnić wszystkie wartości. Ten skrypt wytwarza obiekty do danych podróży, a także przechowuje je w bazie danych PostgreSQL wykorzystując SQLalchemy. To sprawia, że jest to proste, a także skuteczne, aby uzyskać dostęp do danych później.
Ostatnim krokiem było, aby iterować wszystkie numery kolejowe, a także dni, aby pociągnąć dane. Ten skrypt właśnie wykorzystuje niektóre zagnieżdżone pętle, aby uzyskać dane, a także przechowywać. Jeszcze jeden skrypt chwyta dane poprzedniego dnia, a także przechowuje go w bazie danych. Jest to ustawione na pracy Cron, więc baza danych pozostaje świeżo.
Budowanie (tanie) strony internetowej
Strona internetowa Trainstats.ca.
W tym momencie mamy dane przylotowe na ponad 12 000 podróży. Chociaż możemy ręcznie uruchomić zapytania, a także skomponować skrypty do produkcji działek, jest znacznie więcej zabawy, aby umieścić dane online. Oznacza to, że nadszedł czas na opracowanie strony internetowej. Sprawianie, że rzeczy wyglądają świetnie w sieci, nie jest mój forte, więc [Phil Everson] wskoczył, aby zrobić jakiś rozwój sieci.
Aby dodać ograniczenie, chcieliśmy zrobić miejsce jako niedrogie, jak to możliwe, aby uruchomić. Platforma jako oferta usług, takich jak Heroku pobiegła około 20 $ miesięcznie. Osobisty serwer internetowy z DigitalOcean byłby wydawałbym co najmniej 5 $. Najtańszym wyborem miało wykonać stronę statyczną.
Statyczna strona internetowa to podróż z powrotem do dni geoituć. Możesz pomylić pliki, jednak nie można wykonywać żadnego przetwarzania na serwerze. Na szczęście działało to dobrze dla typu danych, które zapewniliśmy. Wszystkie zagregowane dane podróży mogą być eksportowane do plików JSON, a także JavaScript na stronie klienta mogą ton dane, a także wykresy ekranowe.
Witryna Trainstats składa się z niektórych HTML, CSS, a także JavaScript, który działa w przeglądarce, a także zbiór danych JSON z danymi. DataSet zostanie wygenerowany codziennieJeszcze jedną robotą CRON, która umożliwia wszystkie przetwarzanie w jednym przejściu na komputer regionalny. Następnie interfejs wiersza poleceń usług internetowych Amazon jest wykorzystywany do wypychania danych do S3, gdzie można go pobrać przez użytkowników. Ponieważ zestawy danych są małe, a S3 są tanie, to sprawia, że koszty niższe niż normalne hosting.
Wyniki
Ten hack został opracowany głównie dla zabawy, jednak ma kilka fascynujących ustaleń. Na moją normalną trasę Ottawa do Toronto, jestem o wiele bardziej prawdopodobny, aby wybrać pociąg, który jest w odpowiednim czasie 84% czasu, w porównaniu z tym, który jest bezzwłocznie odwrócony tylko na 28% wycieczek. Niektórzy inni podróżnicy mogą również odkryć stosowne statystyki. Tak czy inaczej, był to fascynujący ćwiczenie w skrobaniu zestawu danych, a także dostarczanie usługi internetowej na tanim.
Jeśli myślisz o źródle, wszystko jest na githubu. Uprzejmie prosimy, abyś nie ddos za pomocą szyny z nim.