Усе, що сайт читає сам, можна читати і без сайту: датасет і GTFS міського транспорту Малина, попутки, пункти міжміських поїздок. Без ключів і реєстрації; машинний опис — OpenAPI 3.1.
OpenAPI
openapi.yaml — опис усіх публічних ендпоінтів зі схемами запитів і відповідей. Канонічна адреса https://malin.kiev.ua/openapi.yaml перенаправляє на поточний сервер бекенду, тож зберігайте саме її. Відкрити можна в будь-якому переглядачі OpenAPI (Swagger Editor, Redoc, Stoplight) або згенерувати клієнт.
curl -sL https://malin.kiev.ua/openapi.yaml | head -20Транспорт Малина
- GTFS Static (
/transport/gtfs.zip) — зупинки, маршрути, рейси з часом на кожній зупинці, лінії;feed_version=revisionдатасету,ETagтой самий — зміну розкладу видно умовним запитом без завантаження; - JSON наживо (
/transport/dataset) і знімок збірки (/transport/dataset.json) — повний датасет у форматі сайту: сегменти з тривалістю перегонів, варіанти шляху, опорні часи, тариф і контакти вmeta; - RSS змін розкладу (
/transport/changes.rss) — запис на кожну нову версію даних із підсумком, що саме змінилось; те саме машинно — журнал ревізій/transport/revisions(JSON ізdiff); календар рейсів маршруту —/transport/route/<id>/calendar.ics(підписка за адресою, час у Europe/Kyiv); GET /transport/stops/<id>— зупинка за стабільним id (злита → 301 на чинну),/transport/stop-redirects— уся мапа «старий id → чинний»;- записи з табло —
POST /transport/sticker-scans,sticker-returns,arrival-reports: анонімні, сервер дедуплікує; описані в OpenAPI разом із вікнами й кодами відповідей.
curl -sIL https://malin.kiev.ua/transport/gtfs.zip | grep -i etag
curl -sL https://malin.kiev.ua/transport/gtfs/feed_info.txtЩо ми обіцяємо: стабільні id
- id зупинки
st_NNNNі номер маршруту (route_id) не змінюються й не перевикористовуються — ті самі в адресах сайту (/transport/stop/st_0019,/transport/route/11), у JSON і в GTFS; - перейменування зупинки не змінює id; номер, який бачать люди («11/1»), — окреме поле
shortName; - злита або видалена зупинка лишає запис «старий id → чинний» у
meta.stopRedirectsдатасету щонайменше рік; revision— ISO-час останньої зміни, монотонний, той самий у датасеті, GTFS іETag; id рейсів (trip_id) стабільні лише в межах однієїrevision.
Попутки й міжміські
GET /trip-points — міста; GET /viber-listings і GET /viber-listings/search?date=&fromCode=&toCode= — активні оголошення без контактів; GET /poputky/search?from=&to=&date= — попутки, розклад маршруток і вільні місця одним запитом. Контакт автора — лише окремим запитом по кліку, як і на сайті; персональні дані в API не віддаються.
Ліцензія й увічливість
Дані — під OwnNet Source License 1.1: вільно для людей, міста й бізнесу з доходом до 100 000 USD на рік, з атрибуцією Дані: malin.kiev.ua — Сергій Меренков / ТОВ «Технології» (technologies.llc); більшим компаніям і платним сервісам — за договором. Перевіряйте зміни умовним запитом (If-None-Match) не частіше ніж раз на 5 хвилин, для розкладу досить разу на добу. Детальніше — відкриті дані транспорту Малина; помилки в даних і питання — контакти.