Лично я поклонник поездов. Они хорошие, хотя и медленные, метод обойти страны. Канада не является самым лучшим кандидатом на железнодорожный транзит, при условии, что довольно большая площадь между побережьями, однако с помощью рельса действует рутинная поездка в своем коридоре между Виндзором, а также в Квебек.
К сожалению, Traveler Rail должен произвести до промышленного направления в Канаде, который обычно задерживает задержки. Заметив, что некоторые поезда имеют чрезвычайно регулярные задержки, казалось, что было бы полезно понимать типичные показатели каждого с помощью поезда. С помощью не предоставляет эти данные публично.
Однако они предоставляют некоторые данные о прибытии, а также время отправления. Копая в данных, предлагаемых с любым типом браузера, проверка с помощью железнодорожного сайта, было возможно запросить прошедшие запланированные / фактические данные прибытия. Результатом является Trainstats.ca, экран VIA своевременно производительность. Присоединяйтесь ко мне после перерыва, когда я иду точно, как это все работает, а также то, как именно то, как выбрать чемпион при получении следующего билета на поезд.
Получать данные
VIA делает регулярные данные для предыдущего, тока, а также на следующий день на странице их состояния. Это позволило бы нам разработать набор данных поездки, однако только когда-нибудь одновременно. К счастью, мы можем расторгнуть инспектор Chrome, а также открыть этот запрос GET:
http://reservia.viarail.ca/tsi/gettrainstatus.aspx?l=en&tsiccode=via&tsitrainn number=87&departuredate=2015-12-01&AravalDate=2015-12-01&traninStanceate=2015-12-01&t=1449033500354.
Здесь есть несколько сочных параметров. Цитреннус, несомненно, номер поезда мы смотрим. Отправка – это дата, наезд, а также прибыл, когда он прибыл. TrainSantanceatedAted также, по-видимому, устанавливается на дату влево на поезд. Имея это в виду, пришло время прыгать в Python, а также использовать потрясающие запросы библиотеки для создания некоторых запросов.
Эти данные состоит из двунаправленного текста Unicode, который может быть интерпретирован или скомпилирован по-другому, чем то, что отображается ниже. Чтобы просмотреть, откройте данные в редакторе, который обнародует скрытые символы Unicode.
Откройте для себя гораздо больше о двунаправленных персонажах Unicode
показать скрытые персонажи
полезная нагрузка = {‘l’: ‘en’,
«Циккод»: «Виа»,
«Цитреннумчик»: Train_Number,
«Отправление»: Trip_date,
‘HarivalDate’: Trip_date,
«TrainAnstentalsate»: Trip_date}
r = requests.get (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx'
Пармы = полезная нагрузка)
Вид сырье
request.py.py.
проводится с GitHub
Этот код позволяет нам получать данные для любого типа номера поезда на любой вид даты. После некоторого тестирования мы обнаружили, что данные VIA возвращаются на апрель 2015 года, что дает нам более 6 месяцев данных. Для каждой поездки мы получаем аранжировку, а также фактическое прибытие, а также время отправления для каждой станции. Сохранение этой информации, мы можем быстро определить, насколько задерживаются поезда.
С данными о странице выявлена HTML, скрипт был взломан вместе с использованием BeautifulSoup для извлечения всех значений. Затем этот скрипт производит объекты для данных поездки, а также хранит их в базе данных PostgreSQL, используя SQLalalchemy. Это делает его простым, а также эффективным, чтобы получить доступ к данным позже.
Последний шаг состоял в том, чтобы повторить все номера поездов, а также дни, чтобы потянуть данные. Этот сценарий только что использует некоторые вложенные петли, чтобы получить данные, а также хранить его. Еще один скрипт захватывает данные предыдущего дня, а также хранит его в базе данных. Это настроено на задании CRON, поэтому база данных остается свежей.
Строительство (дешево) сайт
Trainstats.ca сайт
На данный момент у нас есть данные по прибытии более 12 000 поездок. Хотя мы можем вручную запускать запросы, а также составить сценарии для производства участков, это гораздо больше удовольствия, чтобы поставить данные в Интернете. Это указывает на то, что пришло время разработать сайт. Создание вещей отлично выглядит в Интернете, не моя сортировка, поэтому [Фил Еверсон] подпрыгнул, чтобы сделать некоторую веб-разработку.
Чтобы добавить ограничение, мы хотели сделать сайт максимально доступным для запуска. Платформа как сервисные предложения, такие как Heroku, побежали около 20 долларов в месяц. Онлайн личный сервер от Diumpanyocean будет за счет не менее 5 долларов. Наименее дорогой выбор состоял в том, чтобы сделать статический сайт.
Статическая веб-страница – это поездка обратно в дни геодостатов. Вы можете держать файлы, однако нельзя делать какие-либо тип обработки на сервере. К счастью, это работало хорошо для типа данных, которые мы предоставляем. Все агрегированные данные поездки могут быть экспортированы в файлы JSON, а также JavaScript на стороне клиента могут быть данными, а также с помощью графиков экрана.
Сайт поездов состоит из некоторых HTML, CSS, а также JavaScript, который работает в вашем браузере, а также набор данных JSON с данными. Набор данных генерируется ежедневноПо еще одной работе Cron, что позволяет возникнуть вся обработка в одном переходе на региональном компьютере. Затем интерфейс командной строки Amazon Web Services используется для подталкивания данных на S3, где его можно получить пользователями. Поскольку наборы данных невелики, а также S3 дешево, это делает затраты ниже обычного хостинга.
Результаты, достижения
Этот взлом был в основном разработан для удовольствия, однако у него есть несколько увлекательных выводов. На мой обычной Оттаве до Toronto по маршруту мне гораздо больше шансов выбрать поезд, который своевременно 84% времени, по сравнению с тем, который только бросается в станцию без задержки на 28% поездок. Некоторые другие путешественники могут обнаружить благоприятную статистику. В любом случае, это было увлекательное упражнение для соскабливания набора данных, а также поставляя веб-сервис на дешево.
Если вы думаете об источнике, это все на Github для принятия. Мы просим, чтобы вы не были DDoS с помощью железной дороги с ним.