⛽ Аналитика API, данных и возможностей

Забензином.рф — полный разбор текущей архитектуры, источников данных, новых API-возможностей и 40 идей для развития

19
API endpoints
7
таблиц БД
13
типов топлива
4
внешних источника

1. Текущая архитектура

1.1 Схема данных

┌──────────────┐     ┌──────────────────┐     ┌─────────────┐
│  data.db     │◄────│  Express API     │◄────│  Frontend   │
│  (SQLite/    │     │  /api/*          │     │  Leaflet    │
│   Turso)     │────►│  +live proxy     │────►│  +sidebar   │
└──────────────┘     └──────────────────┘     └─────────────┘
       ▲                      │
       │                      ▼
       │              ┌──────────────┐
       └──────────────│ live source  │
                      │ API proxy    │
                      └──────────────┘

1.2 Все API-эндпоинты

GET /api/cfg config
Конфигурация приложения: live-флаги, crypto token, возможности UI. Используется для включения/выключения функций на фронтенде.
GET /api/vt token
Visitor token — случайный hex, TTL 30 мин.
GET /api/rt token
Request token — случайный hex, TTL 30 мин.
GET /api/geoip гео
Определение местоположения по Vercel GeoIP headers: страна, регион, город, lat/lon.
GET /api/nearby?lat=&lon=&radius_km=&zoom= основной АЗС
Главный эндпоинт. Возвращает станции в радиусе (по умолч. 20 км).
Логика: наша БД (станции + статусы) → enrichStations → dedupByBrand → merge с внешним источником → сортировка по расстоянию. Возвращает: osm_id, name, brand, addr, lat, lon, opening_hours, phone, website, operator, services[], payment{}, status, fuels_now, fuel_types[], confirmations, last_at, recent_statuses[], distance_km, confidence_base.
GET /api/stations?lat1=&lon1=&lat2=&lon2= bbox
Станции в bounding box. Та же логика merge, но без сортировки по расстоянию. Лимит 1000 записей.
GET /api/prices[?brand=] цены
Цены по брендам из таблицы prices (источник: gdezapravka). Без brand — группировка {brand: {fuel_type: {price, trend, updated}}}.
GET /api/station/:id детали
Детальная информация о станции: данные станции + latest_status + status_history (20 записей) + price_reports (20).
GET /api/search?q= поиск
Поиск станций по name/brand/address. LIKE %q%, лимит 30, только РФ.
GET /api/comments/:station_id комменты
Комментарии к станции (50 последних).
GET /api/favorites?token=&lat=&lon= избранное
Избранные станции пользователя. Возвращает enriched stations (с статусами, ценами).
POST /api/report статус
Отправить статус АЗС: station_id, status (yes/no/queue/low/limit), fuels, on_site, queue_len, token. Rate limit: 10/мин по IP.
POST /api/trust подтверждение
Подтвердить отчёт: report_id, token. Rate limit: 20/мин.
POST /api/suggest добавить
Предложить новую АЗС: name, brand, address, lat, lon. Создаётся с id = usr_xxxx. Rate limit: 5/мин.
POST /api/price-report цена
Сообщить цену топлива: station_id, fuel_type, price, token. Rate limit: 15/мин.
POST /api/comments коммент
Добавить комментарий: station_id, author_name, text, captcha_a, captcha_b, captcha_sum. Rate limit: 5/мин. Математическая капча.
POST /api/incorrect ошибка
Сообщить о неверных данных: station_id, field, detail. Rate limit: 5/мин.
POST /api/favorites избранное
Добавить в избранное: station_id, token.
DELETE /api/favorites избранное
Удалить из избранного: station_id, token.

2. Таблицы БД

ТаблицаНазначениеКлючевые поля
stationsАЗС из OSM + пользовательскиеid, name, brand, address, lat, lon, fuel_types, opening_hours, phone, website, services, payment, operator
status_reportsОтчёты о наличии топливаstation_id, status, fuels, on_site, queue_len, author_ip
confirmationsПодтверждения отчётовreport_id, author_ip
pricesЦены по брендам (gdezapravka)brand, fuel_type, price, trend, updated_at
favoritesИзбранное пользователейstation_id, user_token
price_reportsНародные цены на топливоstation_id, fuel_type, price, author_ip
incorrect_reportsЖалобы на неверные данныеstation_id, field, detail
commentsКомментарии к станциямstation_id, author_name, text

3. Внешние источники данных

OpenStreetMap импорт статично
Данные об АЗС импортированы ОДИН РАЗ через Overpass API (запрос amenity=fuel) и сохранены в БД. Не обновляются в реальном времени. Используемые OSM-теги: name, brand, addr:*, opening_hours, phone, website, operator, fuel:*, services (car_wash, shop, toilets, compressed_air), payment.
Внешний источник (live) live прокси
Основной источник живых данных. Прокси-запрос к внешнему API с округлением 0.05°. Возвращает краудсорсинговые статусы АЗС (status, fuels_now, confirmations). Мержится с нашими данными: приоритет у наших отчётов (свежее 6ч), иначе данные внешнего источника.
gdezapravka.ru цены импорт
Источник цен по брендам в таблице prices. Импортируется отдельным процессом (не live). Поля: brand, fuel_type, price, trend (up/down/flat), updated_at.
Vercel GeoIP гео
HTTP-заголовки Vercel для определения местоположения: x-vercel-ip-country, x-vercel-ip-city, x-vercel-ip-latitude/longitude. Fallback: Москва (55.75, 37.62).

4. Типы топлива (fuel_types)

АИ-80 (ai80) АИ-91 (ai91) АИ-92 (ai92) АИ-95 (ai95) АИ-96 (ai96) АИ-98 (ai98) АИ-99 (ai99) АИ-100 (ai100) АИ-102 (ai102) ДТ (dt) Газ (gas) Метан (cng) Био (bio) E85 (e85) Керосин (kerosene)

5. Что не используется из OSM (потенциал)

OSM-тегОписаниеПриоритет
wheelchairДоступность для инвалидовeasy
fuel:cng / fuel:lpgДетальные типы газаeasy
fuel:octane_98 и т.д.Октановые числа (если нестандартные)low
capacityКоличество колонокmedium
coveredКрытая АЗСlow
drive_throughВозможность оплаты не выходя из автоeasy
takeawayЕда на выносlow
internet_accessWi-Fi на АЗСmedium
opening_hours:covid19Ограничения времени работыlow
organicОрганическое топливоlow
self_serviceСамообслуживаниеmedium
payment:credit_cardsДетали оплаты картамиeasy
payment:phoneОплата телефоном (NFC)easy
compressed_airПодкачка шин (уже частично)done
vending_machineТорговые автоматыmedium
shelterНавес над колонкамиlow
wasteУтилизация отходовlow
descriptionОписание (особенности)easy
imageФото АЗСmedium
wikidata/wikipediaСсылки на энциклопедииlow
brand:wikidataИдентификатор брендаeasy

6. Новые внешние API и источники (рекомендации)

🔵 6.1 Яндекс.Карты API (Static / Geocoder / Places)
Бесплатный API до 10 000 запросов/сутки. Можно получить: адреса, часы работы, услуги, рейтинг, URL, фото. В отличие от OSM — более свежие данные и больше коммерческих объектов. https://geocode-maps.yandex.ru/1.x/?apikey=...
🔵 6.2 2ГИС API (Places / Search)
Каталог организаций с АЗС. Есть: часы работы, услуги, контакты, отзывы, рейтинг, фото. API-ключ бесплатный до определённого лимита. https://catalog.api.2gis.com/3.0/items?q=АЗС&key=...
🔵 6.3 Росстат / ЦБ РФ — средние цены на топливо
Росстат публикует еженедельные данные о средних ценах на бензин по регионам. Можно парсить или найти API. https://rosstat.gov.ru/statistics/tariffs
🔵 6.4 Overpass API (прямой запрос live)
Вместо статичного импорта — запрашивать OSM напрямую для участка карты. Запрос: [out:json];(node(bbox)["amenity"="fuel"];);out;\; Можно получать свежие OSM-правки.
🔵 6.5 DOT / Минтранс РФ — реестр АЗС
Возможно, есть открытые данные о лицензированных АЗС (но могут быть закрыты). Потенциальный источник: data.gov.ru.
🔵 6.6 OpenStreetMap ODbL API — свежие дампы
Еженедельные Planet.osm дампы или региональные вырезки через Geofabrik.de. Можно регулярно (раз в месяц) обновлять БД новыми станциями.
🔵 6.7 Nominatim (OSM Geocoder)
Для геокодинга адресов и поиска станций по адресу/названию. Бесплатно с ограничением 1 запрос/сек. https://nominatim.openstreetmap.org/search?q=АЗС+Лукойл
🔵 6.8 GraphHopper / OSRM — маршрутизация
Для построения маршрутов до АЗС с учётом пробок и расстояния. Open-source, можно поднять свой сервер.
🔵 6.9 OpenChargeMap — электрозаправки
API для зарядных станций электромобилей. https://api.openchargemap.io/v3/poi Актуально с ростом популярности EV в РФ.
🔵 6.10 Агрегаторы: multigos.ru, benzoclub.ru
Сайты, собирающие цены на бензин. Можно парсить (с осторожностью, robots.txt). Обычно имеют данные по 50+ городам РФ.
🔵 6.11 Telegram API — мониторинг каналов о ценах
Существуют Telegram-каналы и боты с ценами на топливо в реальном времени. Можно мониторить через Bot API или Telethon.
🔵 6.12 Сервисы погоды — влияние на спрос
API погоды (OpenWeatherMap, Яндекс.Погода) для прогнозирования спроса. В дождь/снег меньше поездок → можно коррелировать с ценами.

7. 40 фишек для развития 🚀

📊 Данные и аналитика

1. График цен по дням/неделям
Показывать историю цен на каждое топливо на конкретной АЗС. Линейный график за 7/30 дней. Собирать из price_reports.
2. Средняя цена по городу / региону
Агрегировать все цены в радиусе города. Показывать: средняя, мин, макс по АИ-92/95/98/ДТ. Сравнение с соседними городами.
3. Тренд цен (неделя/месяц)
Стрелки + проценты: «АИ-95 подорожал на 1.5% за неделю». Автоматически из истории цен.
4. Прогноз цены (ML-модель)
На основе исторических данных предсказывать цену на завтра/неделю. Простая линейная регрессия или ARIMA.
5. Уведомление о снижении цены
Подписка: «Сообщить, когда АИ-95 на этой АЗС станет дешевле N рублей». Push/email/Telegram.
6. Карта цен (heatmap)
Цветовая карта города: зелёные = дешёвые районы, красные = дорогие. Быстро найти, где заправиться выгодно.
7. Рейтинг АЗС по цене
Топ-10 самых дешёвых АЗС в радиусе. Топ-10 самых дорогих. По каждому типу топлива.
8. Сравнение сети АЗС
Средняя цена по сети Лукойл vs Роснефть vs Газпромнефть. Где в среднем дешевле?
9. Инфляция топлива
График цен на топливо за год по России. Наложить на официальные данные Росстата.
10. Export данных (CSV/JSON)
Кнопка «Скачать данные» — выгрузка цен по радиусу для анализа в Excel.

🗺️ Маршруты и навигация

11. Маршрут с дозаправкой
Проложить маршрут A→B с промежуточной остановкой на самой дешёвой АЗС по пути. Интеграция с GraphHopper/OSRM.
12. Оптимизация стоимости заправки
«Если вам нужно 40л АИ-95, оптимально заправиться на АЗС X — сэкономите Y ₽ по сравнению с ближайшей».
13. Очереди live
Пользователи отмечают длину очереди. Показывать: «Сейчас 3 машины, время ожидания ~7 мин».
14. Навигация до АЗС (шаги)
Встроенный навигатор: «Поверните налево через 300м. АЗС будет справа». Голосовые подсказки.
15. АЗС по пути (waypoints)
Пользователь задаёт маршрут, приложение показывает АЗС вдоль маршрута с ценами и отклонением от пути.
16. Сравнение: объезд vs экономия
«Объезд 2 км до дешёвой АЗС сэкономит 150 ₽. Стоит ли?» — расчёт времени/топлива.

💳 Транзакции и учёт

17. История заправок
Личный кабинет: дата, АЗС, тип топлива, объём, цена, стоимость. Вводить вручную или чеки.
18. Калькулятор стоимости заправки
«Залить 45л АИ-95 = 2 340 ₽» — быстрый расчёт на основе текущих цен выбранной АЗС.
19. Расход топлива (tracker)
Пользователь вводит пробег и объём заправки. Приложение считает расход л/100км. График динамики.
20. Бюджет на топливо
Месячный/недельный бюджет. Сколько потрачено, сколько осталось. Прогноз на месяц.
21. Чеки и фото
Фотографировать чеки, приложение распознаёт OCR (Tesseract) — автоматический ввод цены, объёма, АЗС.
22. Налоговый вычет (для такси/доставки)
Генерация отчёта о расходах на топливо для ИП/самозанятых. Экспорт в PDF.

👥 Сообщество и геймификация

23. Рейтинг пользователей
Кто больше всех сообщил цены? Таблица лидеров за неделю/месяц.
24. Бейджи и достижения
«Первооткрыватель» (первый отчёт о новой АЗС), «Экономист» (10 подтверждений), «Метеор» (50 отчётов).
25. Отзывы и оценки АЗС
5-звёздочный рейтинг: качество топлива, сервис, туалет, магазин. Уже есть comments — расширить.
26. Фото АЗС от пользователей
Загрузка фото: как выглядит АЗС, колонки, магазин. Галерея на странице станции.
27. История статусов АЗС (таймлайн)
Показывать историю: «10:15 — есть топливо», «12:30 — очередь 2 машины», «14:00 — нет топлива». Визуальный таймлайн.
28. Чат по АЗС
Общий чат у каждой АЗС: «Кто знает, когда привезут 95-й?» — ответы в реальном времени.
29. Вопрос-ответ (как Яндекс.Карты)
«Работает ли автоматическая мойка?», «Есть ли АИ-100?» — отвечают другие пользователи.
30. Совместные поездки (carpool)
Найти попутчика до АЗС с дешёвым топливом. Разделить стоимость поездки.

🔗 Интеграции

31. Telegram Bot
Бот: «АИ-92 рядом 57.3 ₽, АЗС Лукойл на Ленина». Подписка на снижение цены, поиск ближайшей.
32. PWA / Push-уведомления
Уведомления: цена упала, появилось топливо, рядом АЗС со скидкой. Добавить Service Worker.
33. Apple CarPlay / Android Auto
Приложение на экране авто: карта АЗС + цены, навигация, маршрут с дозаправкой.
34. Виджеты iOS/Android
Виджет на домашний экран: «3 ближайших АЗС + цены». Быстрый доступ без открытия приложения.
35. Умные колонки / Алиса
Навык Алисы: «Алиса, где дешёвый бензин?», «Алиса, сколько стоит 95-й на ближайшей Лукойл?»
36. Shortcuts / AppleScript
Пользовательские скрипты: «Когда приезжаю на работу, проверять цену на АЗС рядом».
37. Плагин для браузера
Расширение Chrome: при открытии 2ГИС/Яндекс.Карт накладывает цены нашего сервиса.

💰 Бизнес и монетизация

38. Premium-подписка
Без рекламы, история цен за год, CSV-экспорт, приоритетные уведомления, API-доступ.
39. Для АЗС (панель управления)
Владелец АЗС может зайти, подтвердить статус, обновить цены, добавить услуги, отвечать на отзывы. Монетизация: подписка для АЗС.
40. Партнёрские программы
Купоны и скидки: скидка 1₽/л по промокоду с нашего сервиса → комиссия с АЗС. Кобрендинговые карты лояльности.

8. Проблемы текущей архитектуры

9. Приоритетные доработки (roadmap)

ПриоритетЧто сделатьСложностьЭффект
P0Автообновление OSM-данных (Overpass)2 дняНовые АЗС, актуальные теги
P0График цен по дням (история)1 деньВовлечение, доверие к данным
P0PWA + push-уведомления2 дняВозврат пользователей
P1Telegram Bot2 дня50k+ аудитория
P1Средняя цена по городу0.5 дняПолезно для всех
P1Уведомления о снижении цены1 деньКиллер-фича
P1Карта цен (heatmap)1 деньВизуально мощно
P2Маршрут с дозаправкой2 дняУникальная фича
P2История заправок (личный кабинет)2 дняУдержание
P2Расход топлива tracker1.5 дняПолезно
P2Экспорт данных (CSV)0.5 дняPro feature
P2Панель для АЗС3 дняМонетизация

10. Сводка: что мы запрашиваем, откуда, как получаем

ДАННЫЙ ОТЧЁТ СОЗДАН: 18.07.2026
ТЕКУЩАЯ БАЗА: ~1000+ АЗС в БД (РФ)
ЖИВЫЕ ДАННЫЕ: внешний источник (статусы), наши отчёты (статусы + цены)
СТАТИЧНЫЕ: OSM (станции), gdezapravka (цены по брендам)

ФРОНТЕНД → СЕРВЕР:
  fetch /api/nearby → JSON {stations: [{osm_id, name, brand, addr, services,
    payment, status, fuels_now, fuel_types, pricesByBrand, ...}]}

СЕРВЕР → БД (SQLite/Turso):
  SELECT * FROM stations WHERE lat/lon bbox
  SELECT + JOIN status_reports, confirmations
  SELECT prices (brand → fuel_type → price)

СЕРВЕР → внешний источник (прокси):
  HTTPS GET /api/nearby?lat=...&lon=...
  Response: {stations: [{osm_id, name, status, fuels_now, ...}]}
  → merge с нашими станциями (приоритет наших отчётов < 6ч)

СЕРВЕР → ФРОНТЕНД:
  enrichedStations[] = own + external, sorted by distance
  pricesByBrand: {brand: {fuel: {price, trend, updated}}}

НАШИ КРОУДСОРСИНГ-ДАННЫЕ:
  POST /api/report — статус (yes/no/low/queue/limit)
  POST /api/trust — верификация
  POST /api/price-report — цена на конкретный fuel_type
  POST /api/comments — текст + автор + капча
  POST /api/incorrect — жалоба на данные

ТЕКУЩИЙ ФРОНТЕНД:
  Leaflet.js карта + кастомный popup (LED-стиль)
  Sidebar со списком (сортировка по расстоянию)
  Редактор цен (numpad, staged, bulk submit)
  Избранное (localStorage token)
  Поиск по названию/бренду

Отчёт создан автоматически на основе анализа кода проекта. Рекомендации основаны на исследовании рынка.