Деякі можливості системи пошуку маршрутів від Deutsche Bahn

Як відомо, сайт Deutsche Bahn дозволяє доволі гнучко шукати необхідні маршрути через можливість задання тих чи інших обмежень та налаштувань, як от: проміжні станції, види транспорту, пряме сполучення тощо.

Усе це є можливим через використання системи пошуку HAFAS від німецької компанії HaCon, яка кілька років тому була куплена Siemens. HAFAS доволі довго був де-факто стандартом для систем планування маршрутів та купівлі квитків багатьох західних залізниць та транспортних компаній: DB, ÖBB, SBB, PKP, NMBS, CFL, більшості транспортних компаній Німеччині та Австрії, а також деколи зустрічався в інших країнах. Останніми роками ситуація почала змінюватись, але про це – згодом.

Кожна система HAFAS є тою чи іншою мірою кастомізованою під потреби та вимоги замовника. Завдяки цьому деякі сайти планування маршрутів можуть більше, аніж інші. Але доволі часто функціональність, що є на одному сайті може бути використана також на інших. Це є можливим через формування відповідних HTTP запитів до бекенду HAFAS. Як це виглядає на практиці? Отак:

reiseauskunft.bahn.de/bin/query.exe/en?start=1&REQ0JourneyStopsS0A=1&S=Berlin+Hbf&REQ0JourneyStopsZ0A=1&Z=NUREMBERG&date=15.06.2023&time=14%3A00

Якщо ви перейдете в браузері по вказаній вище адресі, то отримаєте результати пошуку по маршруту Berlin Hbf – Nuremberg з датою відправлення 15.06.2023 після 14:00.
Схожий запит (хоч і з більшою к-стю параметрів) формує і сам сайт DB, і його можна побачити в адресному рядку браузера (або в Network Inspector), тому в цьому немає нічого нового чи цікавого.

Цікавіше взяти параметри помічені на інших сайтах, та спробувати використати їх з сайтом DB. Наприклад на старому сайті rozklad-pkp.pl є опція про виключення з пошуку потягів з обовʼязковою резервацією

REQ0HafasAttrExc=RP

Прокладемо маршрут від Берліна до Познані додавши цей параметр:

reiseauskunft.bahn.de/bin/query.exe/en?start=1&REQ0JourneyStopsS0A=1&S=Berlin+Hbf&REQ0JourneyStopsZ0A=1&Z=Poznan+Gl.&date=15.06.2023&time=14%3A00&REQ0HafasAttrExc=RP

Вуаля – параметр працює, і ми їдемо до Познані регіоналами через Kostrzyn 😁
Що таке “RP”? Це – так званий атрибут потяга, який у цьому випадку означає Reservierungspflicht (Обов’язок резервації). Кожна HAFAS система має дещо кастомізований набір таких атрибутів, і атрибути того, чи іншого потяга з результатів пошуку можна подивитись замінивши в адресі “/en” на “/el” (чи “/dl” для німецького варіанту). Деякі приклади:

FB: Number of bicycles conveyed limited
J2: 2nd class only seated accommodation
RE: Please reserve
SW: Sleeping-car
LW: Couchettes
EA: Behindertengerechte Ausstattung
KK: parent-and-children compartment
RP: Subject to compulsory reservation
OR: Seat reservation included in price when purchased together with ticket
TY: Thalys ticket required
GP: Global price

Дивлячись на цей список, у вас може виникнути ідея, як відфільтрувати Thalys на маршруті Paris – Köln.
Пробуємо:

reiseauskunft.bahn.de/bin/query.exe/en?start=1&REQ0JourneyStopsS0A=1&S=Paris&REQ0JourneyStopsZ0A=1&Z=Köln+Hbf&date=15.06.2023&time=14%3A00&REQ0HafasAttrExc=TY

І бачимо, що частина Thalys дійсно зникла, але частина залишилась, бо в них чомусь не заведений атрибут “TY”. Зате заведений “GP” (Global Price). Замінивши останній параметр в адресі на

REQ0HafasAttrExc=TY:GP

прибираємо усі Thalys з пошуку. Схожа ситуація з FlixTrain, тільки в них пара атрибутів – FX:FN

До речі, у параметра “REQ0HafasAttrExc” є антагоніст “REQ0HafasAttrInc”, який включає до пошуку тільки потяги з вказаними параметрами (наприклад “REQ0HafasAttrInc=RP”, чи “REQ0HafasAttrInc=TY:GP”).

Назви операторів-перевізників розділених комами, у залежності від значення іншого параметра “REQ0HafasOpFilterMode” цей список визначає або тих перевізників, поїзди яких пошук має уникати, або навпаки вказує на перевізників, лише поїздами яких можна їхати:

REQ0HafasOpFilter=…

Виключити з пошуку перевізників вказаних у “REQ0HafasOpFilter”

REQ0HafasOpFilterMode=1

Включати в пошук виключно перевізників з “REQ0HafasOpFilter”

REQ0HafasOpFilterMode=2

Повну назву перевізника на сайті Deutsche Bahn можна побачити в інформації про поїзд.

Приклади:

REQ0HafasOpFilter=SNCF%20Voyages%20Deutschland,THALYS,EUROSTAR
reiseauskunft.bahn.de/bin/query.exe/en?start=1&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=PARIS&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=Frankfurt%28Main%29Hbf&REQ0JourneyDate=19.07.23&REQ0JourneyTime=06%3A00&REQ0HafasOpFilterMode=1&REQ0HafasOpFilter=SNCF%20Voyages%20Deutschland,THALYS,EUROSTAR
reiseauskunft.bahn.de/bin/query.exe/en?start=1&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=PARIS&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=Frankfurt%28Main%29Hbf&REQ0JourneyDate=19.07.23&REQ0JourneyTime=06%3A00&REQ0HafasOpFilterMode=2&REQ0HafasOpFilter=DB%20Fernverkehr%20AG,SNCF

Джерело: railwayclub.info