Консольное приложение на Kotlin для получения и просмотра данных о маршрутах наземного общественного транспорта Санкт-Петербурга.
Приложение загружает данные из API портала data.gov.spb.ru, сохраняет их в PostgreSQL и предоставляет интерактивный CLI для поиска маршрутов, остановок и связей между ними.
- Загрузка и обновление данных о маршрутах из API.
- Хранение данных в PostgreSQL.
- Поиск маршрута по номеру или названию.
- Поиск остановки по названию.
- Просмотр остановок маршрута по направлениям.
- Просмотр маршрутов, проходящих через остановку.
- Просмотр подробной информации о маршруте.
- Автоматический подсчёт количества остановок маршрута с помощью PostgreSQL-триггера.
- Очистка локальной базы данных через консольную команду.
- Kotlin
- JDK 17
- Spring Boot
- Spring Data JPA
- EclipseLink
- PostgreSQL
- Gradle
- kotlinx.coroutines
- Jackson и Gson
- API data.gov.spb.ru
Перед запуском убедитесь, что установлены:
- JDK 17 или новее;
- PostgreSQL;
- Git.
Также потребуется токен доступа к API data.gov.spb.ru.
Клонируйте репозиторий:
git clone https://github.com/scriptyyy13/spbTransportRoutesCLI.git
cd spbTransportRoutesCLIСоздайте базу данных PostgreSQL. Например:
CREATE DATABASE spb_transport;Создайте в корне проекта файл .env на основе .env_example:
DB_URL=jdbc:postgresql://localhost:5432/spb_transport
DB_USER=postgres
DB_PASSWORD=admin
API_TOKEN=YOUR_API_TOKEN
API_URL=https://data.gov.spb.ru/api/v2/datasets/159/versions/latest/data/643/Замените следующие значения на свои:
| Переменная | Назначение |
|---|---|
DB_URL |
JDBC-адрес базы данных PostgreSQL |
DB_USER |
имя пользователя PostgreSQL |
DB_PASSWORD |
пароль пользователя PostgreSQL |
API_TOKEN |
токен доступа к API |
API_URL |
адрес набора данных API |
- Откройте data.gov.spb.ru.
- Зарегистрируйтесь или войдите в существующий аккаунт.
- Найдите токен в профиле пользователя.
- Укажите его в переменной
API_TOKENфайла.env.
Для сборки проекта используйте Gradle.
Linux/macOS:
./gradlew buildWindows:
.\gradlew.bat buildПосле успешной сборки JAR-файл будет находиться в каталоге build/libs.
Запуск из Gradle:
./gradlew runЕсли задача run недоступна в вашей конфигурации Gradle, запустите собранный JAR-файл:
java -jar build/libs/<имя-файла>.jarПосле запуска приложение предложит использовать интерактивную консоль:
Введите help для списка команд
>
Введите:
help
Доступные команды:
| Команда | Описание |
|---|---|
help |
показать список доступных команд |
update_info |
загрузить или обновить данные из API |
get_route_info <маршрут> |
показать подробную информацию о маршруте |
get_stops <маршрут> |
показать список остановок маршрута |
get_routes <остановка> |
показать маршруты, проходящие через остановку |
clear |
полностью очистить базу данных |
exit |
завершить работу приложения |
После первого запуска загрузите данные из API:
update_info
Приложение загрузит страницы API и сохранит новые записи в PostgreSQL. Уже существующие записи будут пропущены.
Поиск маршрута можно выполнить по номеру или названию:
get_route_info 24
Команда выводит:
- Краткое и полное название маршрута.
- Тип транспорта.
- Идентификатор маршрута.
- Расстояние по направлениям.
- Общее количество остановок.
get_stops 24
Команда выводит остановки маршрута, сгруппированные по направлениям.
get_routes Невский проспект
Команда выводит все маршруты, которые проходят через указанную остановку.
Если найдено несколько маршрутов или остановок с одинаковым названием, приложение выведет их идентификаторы.
Для точного поиска по идентификатору используйте префикс i:
get_route_info i12345
get_stops i12345
get_routes i67890
Команда полностью удаляет маршруты, остановки и связи между ними:
clear
Для подтверждения операции введите:
y
Чтобы отменить очистку, введите любое другое значение:
n
Команда
clearудаляет все загруженные данные из локальной базы данных. После очистки потребуется снова выполнитьupdate_info.
src/
└── main/
└── kotlin/
├── command/ # Команды консольного интерфейса
├── entity/ # JPA-сущности
├── repository/ # Репозитории для работы с БД
├── service/ # Бизнес-логика и загрузка данных из API
├── ConsoleCli.kt # Интерактивная консоль
└── Main.kt # Точка входа приложения
Команда update_info обращается к API и загружает данные постранично. Полученные сведения сохраняются в базу данных, а дубликаты пропускаются.
При добавлении связей между маршрутами и остановками PostgreSQL-триггер обновляет количество остановок соответствующего маршрута.
Проверьте:
- Запущен ли сервер PostgreSQL.
- Существует ли база данных.
- Правильно ли указаны
DB_URL,DB_USERиDB_PASSWORD. - Доступен ли порт PostgreSQL, обычно
5432.
Проверьте:
- Указан ли
API_TOKEN. - Не истёк ли токен.
- Правильно ли указан
API_URL. - Есть ли подключение к интернету.
Убедитесь, что:
- Файл называется именно
.env. - Файл находится в корне проекта.
- Переменная называется
API_TOKEN. - Значение токена указано без лишних пробелов и кавычек.
Не тырить.