В данном разделе описаны правила, требования для получения доступа и примеры того, как подключить и использовать данные навигации RISX на вашем веб-сайте.
1.1 Нарушение данных правил может привести к прекращению предоставления данных навигации для вашего сайта.
1.2 Данные поставляются по принципу "как-есть", передача всех данных навигации не гарантируется.
1.3 После изменения данных правил сторонним сайтам даётся 30 дней на обновление их проектов в соответствии с новыми требованиями.
1.3 На каждой странице, использующей данные навигации RISX, вы обязанны добавить стандартизированную плашку системы, ведущую на сайт системы, по одной из ссылок:
- https://risx.app;
- https://ru.risx.app.
1.4 Плашка должна соответствовать установленому образцу:
- размер: не менее 500х75;
- наличие логотипа RISX;
- наличие текста: Данные отслеживания RISX;
- наличие работающей переадресации на сайт RISX согласно пункту 1.3.
1.5 Плашка должна быть видна целиком при нахождении пользователя на любой из частей страницы.
Для использования данных навигации на вашем сайте, вам требуется предоставить все доменные имена, которые будут использовать данные навигации. Учтите, что без этого вы не сможете получать данные от RISX.
Запросить подключение вашего сервиса вы можете в нашем Discord канале, обратившить к разработчикам в разделе #ask-dev: https://discord.gg/v8wnH8MMZA.
RISX использует технологию SSE (Server Side Events) для передачи данных навигации в реальном времени. Мы рекомендует использовать EventSource, однако вы можете использовать любой другой способ.
Учтите, если ваш сервер находится в пределах Российской Федерации доменное имя nano.risx.app может быть недоступно, в таком случае рекомендуем использовать ru.risx.app.
Создание EventSource
const eventSource = new EventSource('https://nano.risx.app/api/sse/public/{serverId}', {
withCredentials: true
});Введя номер сервера от 1 до 7 в адресной строке на место {serverId} вы получите ивент-ответ об успешном подключении к серверу.
Event 'onopen'
eventSource.onopen = (event) => {
//отображение успешного подключения
};В случае получение ошибки ответ будет возвращён в ивент 'onerror'.
Event 'onerror'
eventSource.onerror = (event) => {
//обработка ошибки
};Для получения сообщений от сервера следует реализовать ивент 'onmessage'.
Event 'onmessage'
eventSource.onmessage = (event) => {
try {
const parsedData = JSON.parse(event.data);
//обработка полученных данных
} catch (e) {
//обработка исключения
}
};Далее следует подписаться на ивенты передаваемые RISX, содержащие данные навигации:
- 'bus-inject': отправляется единожны при подключении, передаёт список объектов данных автобуса всех активных автобусов на момент подключения;
- 'bus-update': отправляется при появлении нового автобуса или обновлении данных уже существующего, передаёт объект данных автобуса;
- 'bus-reject': отправляется при отключении или потери подключения автобуса с сервером, передаёт объект сессии водителя.
Подпись на ивенты отслеживания
eventSource.addEventListener('bus-inject', (event) => {
try {
const parsedData = JSON.parse(event.data);
//обработка полученных данных
} catch (e) {
//обработка исключения
}
});
eventSource.addEventListener('bus-update', (event) => {
try {
const parsedData = JSON.parse(event.data);
//обработка полученных данных
} catch (e) {
//обработка исключения
}
});
eventSource.addEventListener('bus-reject', (event) => {
try {
const parsedData = JSON.parse(event.data);
//обработка полученных данных
} catch (e) {
//обработка исключения
}
});Объект данных автобуса содержит все основные параметры о каждом из активных водителей.
Объект данных автобуса
{
string SessionHash //идентификатор сессии водителя
string NickName //игровой никнейм водителя
string RouteId //идентификатор маршрута
string RouteName //название маршрута
string Company //названии организации
string Stop //идентификатор остановки, к которой следует автобус
string Direction //идентификатор конечной остановки, к которой следует автобус
int Speed //скорость автобуса, НЕ ЗАДЕЙСТВОВАНО
bool IsOnRoute //находится ли автобус на трассе маршрута, НЕ ЗАДЕЙСТВОВАНО
double PositionLongitude //долгота позиции автобуса
double PositionLatitude //широта позиции автобуса
DateTime At //временная метка получения данных автобуса
}Объект сессии водителя содержит исключительно идентификатор сессии, по которому определяется водитель.
Объект сессии водителя
{
string SessionHash //идентификатор сессии водителя
}Вы также можете запросить данные маршрута, передав sessionHash и {serverId} по адресу: https://nano.risx.app/api/sessions/{serverId}?hash={encodeURIComponent(e.sessionHash)}.
Объект данных маршрута
{
string SessionHash //идентификатор сессии водителя
{
string Key //идентификатор конечной остановки
{
string Id //идентификатор остановки
int Index //индекс остановки
bool IsEndOfRoute //параметр конечной остановки
{
double Longitude //долгота позиции остановки
double Latitude //широта позиции остановки
} Position //данные позиции остановки
}[] Nodes //список остановок в заданном направлении
}[] Nodes //список остановок направлений
{
public required string Key //идентификатор конечной остановки
{
double Longitude //долгота точки
double Latitude //широта точки
}[] Coordinates //список координат направления
} Paths //список линий направлений
}Логотип RISX (svg)
<svg viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg" shapeRendering="geometricPrecision">
<path fillRule="evenodd" clipRule="evenodd" d="M3.8607 48.2596L3.8607 30.1892C3.8607 27.8514 4.84653 26.8979 7.12627 26.8979H15.2286C17.2927 26.8979 18.1245 25.4829 18.1245 24.0064C18.1245 22.5299 17.2311 21.2687 15.2286 21.2687H4.64645L0 47.5799L3.8607 48.2596Z"/>
<path d="M50.5989 21.2687L39.9396 21.2687C38.0604 21.2687 37.2286 22.2838 37.2286 23.7295C37.2286 24.9907 37.8755 26.1904 40.3093 26.1904H45.1769C49.8998 26.1904 51.6073 28.3685 52.0455 30.8209L53.7324 21.2687L50.5989 21.2687Z"/>
<path fillRule="evenodd" clipRule="evenodd" d="M29.5191 3.87061L29.5191 34.7725H45.6698C47.6414 34.7725 48.5348 33.6959 48.5348 32.1886C48.5348 30.8352 47.8263 29.6048 45.2693 29.6048L40.4325 29.6048C34.8872 29.6048 33.5933 26.498 33.5933 23.6065C33.5933 20.1613 35.4418 17.639 40.0628 17.639H50.5989H54.3734L56 8.42795L30.1146 3.87061H29.5191Z"/>
<path fillRule="evenodd" clipRule="evenodd" d="M45.5465 38.4022L29.5191 38.4022V52.1373H48.2811L51.1123 36.105C50.0976 37.5274 48.3071 38.4022 45.5465 38.4022ZM13.4418 30.3738H8.01968C7.68081 30.3738 7.49596 30.5276 7.49596 30.8967V48.8996L25.8838 52.137V51.4721L13.4418 30.3738Z"/>
<path d="M15.1054 17.639C19.7881 17.639 21.7905 20.5305 21.7905 23.8526C21.7905 26.4365 20.5582 29.2049 17.3851 30.0969L25.8838 44.7796L25.8838 3.87061L7.71887 3.87061L5.28744 17.639H15.1054Z"/>
<path fillRule="evenodd" clipRule="evenodd" d="M3.8607 48.2596L3.8607 30.1892C3.8607 27.8514 4.84653 26.8979 7.12627 26.8979H15.2286C17.2927 26.8979 18.1245 25.4829 18.1245 24.0064C18.1245 22.5299 17.2311 21.2687 15.2286 21.2687H4.64645L0 47.5799L3.8607 48.2596Z"/>
<path d="M50.5989 21.2687L39.9396 21.2687C38.0604 21.2687 37.2286 22.2838 37.2286 23.7295C37.2286 24.9907 37.8755 26.1904 40.3093 26.1904H45.1769C49.8998 26.1904 51.6073 28.3685 52.0455 30.8209L53.7324 21.2687L50.5989 21.2687Z"/>
<path fillRule="evenodd" clipRule="evenodd" d="M29.5191 3.87061L29.5191 34.7725H45.6698C47.6414 34.7725 48.5348 33.6959 48.5348 32.1886C48.5348 30.8352 47.8263 29.6048 45.2693 29.6048L40.4325 29.6048C34.8872 29.6048 33.5933 26.498 33.5933 23.6065C33.5933 20.1613 35.4418 17.639 40.0628 17.639H50.5989H54.3734L56 8.42795L30.1146 3.87061H29.5191Z"/>
<path fillRule="evenodd" clipRule="evenodd" d="M45.5465 38.4022L29.5191 38.4022V52.1373H48.2811L51.1123 36.105C50.0976 37.5274 48.3071 38.4022 45.5465 38.4022ZM13.4418 30.3738H8.01968C7.68081 30.3738 7.49596 30.5276 7.49596 30.8967V48.8996L25.8838 52.137V51.4721L13.4418 30.3738Z"/>
<path d="M15.1054 17.639C19.7881 17.639 21.7905 20.5305 21.7905 23.8526C21.7905 26.4365 20.5582 29.2049 17.3851 30.0969L25.8838 44.7796L25.8838 3.87061L7.71887 3.87061L5.28744 17.639H15.1054Z"/>
</svg>