CFR SA, румынская национальная компания по управлению железнодорожной инфраструктурой, предлагает онлайн-информационный сервис в режиме реального времени (на основе форм ASPX с обратной отправкой состояния просмотра и проверкой событий) для получения данных, близких к реальному времени , об отправлениях, прибытиях и платформах, на которых поезда прибывают на станции, а также о задержках рейсов. и обновления. В то время всей этой системе не хватает API или даже достойного, простого в использовании и легко находимого интерфейса для конечных пользователей.
Этот API на основе Flask извлекает данные из веб-приложения CFR по запросу в конечной точке API URL и выводит повторно используемые данные JSON. Программа извлекает всю информацию из переменной __VIEWSTATE ASP.Net.
Вам необходимо, чтобы в вашей системе были установлены Python 3.6+ и Pipenv.
$ apt установить python3 python3-pip $ pip3 установить Pipenv
Клонируйте репозиторий и установите зависимости модуля:
$ git clone https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-scraper $ пайпенв установить
Запустите сервер API, как указано в документации Flask.
$ Pipenv запустить флягу запустить
Для успешной установки вам может потребоваться отредактировать Pipfile, чтобы он соответствовал вашей локальной версии Python.
python_version = "3.6.9"
Flask по умолчанию слушает только локальные запросы. Целесообразно оставить все как есть и установить обратный прокси-сервер для более крупных развертываний, но для доступа к вашей тестовой машине из локальной сети запустите:
$ Pipenv запустить флягу запустить --host 0.0.0.0
Это будет привязано ко всем доступным интерфейсам.
Теперь вы можете указать в браузере http://localhost:5000/station/ID, чтобы увидеть волшебство. ID – уникальный код станции; список предоставляется конечной точкой http://localhost:5000/get-stations/.
Например, чтобы получить объект JSON с текущим табло отправления/прибытия и информацией о задержке для Северного железнодорожного вокзала Бухареста (главного и крупнейшего в нашей стране), вы должны указать свой браузер или переменную URL-адреса для любого приложения, которое вы используете. данные по адресу: http://localhost:5000/station/10017.
Точно так же, как вы можете узнать текущие поезда на определенной железнодорожной станции, вы можете получить текущую информацию для определенного поезда. CFR предоставляет такую информацию, как задержки, последнюю станцию, которую проехал поезд (с 7-минутной задержкой), следующую станцию и другую полезную информацию.
Просто укажите в браузере http://localhost:5000/train/ID, где ID — это уникальный номер поезда. Вы можете получить эти идентификаторы из информационной ленты станции. Например, вы можете получить информацию о поезде IR 1651, идущем из Северного Бухареста в Северную Сучаву (действительна по состоянию на апрель 2017 г.), открыв http://localhost:5000/train/1651.
В API также включен веб-клиент. Перейдите по адресу http://localhost:5000/static/station.html, http://localhost:5000/static/train.html или http://localhost:5000/static/train.html?tren=9351 (предопределенный поезд номер), чтобы увидеть его.
Хотя сами официальные приложения работают, но выглядят не так хорошо, румынские разработчики приложили все усилия, чтобы создать несколько действительно крутых проектов с открытым исходным кодом и онлайн-сервисов, связанных с транспортом и инфраструктурой. Посмотрите эту живую карту, конвертер GTFS, планировщик поездок и т. д.
Используя этот API и другие общедоступные ресурсы, вы можете создать свой собственный стиль табло отправления станции, службу уведомления о задержке, круто выглядящее мобильное приложение, одновременно научившись программировать и работать со структурированными данными?
Это проект с полностью открытым исходным кодом, построенный на модулях и библиотеках с открытым исходным кодом и имеющий лицензию Do What the Fuck You Want (публичная лицензия версии 2).
Кроме того, вы несете полную ответственность за то, что вы с ним делаете — имейте в виду, что CFR SA и InfoFer (ИТ-фирма, принадлежащая государственным железным дорогам и создающая их программное обеспечение) не особенно прозрачны и не дружелюбны к сторонним разработчикам. Если вы занимаетесь массовым парсингом или разрабатываете какой-нибудь общедоступный сервис, который генерирует к ним большой объем трафика с одного и того же сервера или клонирует их данные в базу данных по разным причинам, вы можете столкнуться с некоторыми проблемами, как это сделал этот коллега-энтузиаст при создании веб-сайта. планировщик поездок, используя расписание CFR Calatori с их веб-сайта.
Но если вы возитесь, экспериментируете и работаете с данными в реальном времени, которые явно не могут никого сбить с толку, если ошибка не связана с самим CFR, у вас все будет в порядке и вы находитесь на правильной стороне закона, по крайней мере, исходя из моего опыта. Возможно, в какой-то момент они предложат свой собственный API с соответствующими правилами и лицензированием.
Запросы не аутентифицируются и не применяется ограничение скорости, поэтому они никоим образом не готовы к публикации в Интернете.
Это не особенно быстро, поскольку веб-страница CFR тоже не такая быстрая. Вероятно, вам понадобятся фоновые запросы и кеширование. После выполнения первоначального запроса он будет ждать 8 секунд, прежде чем анализировать данные. Если данные не отобразились на веб-странице, произойдет ожидание еще 20 секунд. После этого API выдаст пустой объект — это может означать, что очищенный веб-сервис не работает, он очень медленно отвечает или на этой конкретной станции действительно нет текущих рейсов (ночью или на небольшой остановке, например). пример). Исправлено: если API не работает, вы получите статус ошибки 5xx.
Это очистка и анализ, поэтому любое структурное обновление веб-страницы CFR, хотя и маловероятное в ближайшем будущем, может нарушить это.
Информационная лента поездов не предоставляет подробностей о задержках поездов и другой полезной информации, которую Infofer предлагает в своих услугах. Это будет обновлено в будущем. Исправлено: вся общедоступная информация IRIS выводится через этот API.
Веб-сервис общественной информации, предоставляемый CFR SA через Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx. Это информация администрации инфраструктуры, а не конкретного пассажирского перевозчика. Официальные расписания движения пассажиров можно найти здесь: http://mersultrenurilor.infofer.ro, а статический источник данных XML с расписаниями обновляется в конце каждого года: http://data.gov.ro/organization/sc-informatica-feroviara- са