⛽ Аналитика API, данных и возможностей
Забензином.рф — полный разбор текущей архитектуры, источников данных, новых API-возможностей и 40 идей для развития
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_access | Wi-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. Проблемы текущей архитектуры
⚠️ Статичные OSM-данные
Станции импортированы один раз. Новые АЗС не появляются. Решение: Overpass live или периодический реимпорт.
⚠️ Зависимость от внешнего источника
Если внешний источник падает или меняет API — пропадает живой статус. Нужна система кэширования и fallback.
⚠️ Нет WebSocket / SSE
Данные обновляются только при ручном запросе. Нет live-обновлений статусов на карте.
⚠️ Отсутствие автообновления ОСМ-тегов
Если в OSM изменились часы работы, телефон, услуги — у нас остаются старые данные.
⚠️ Rate limiting вручную
Лимиты на 5-20 запросов в минуту на IP — жёстко. Нет капчи для ботов (кроме комментариев).
⚠️ Нет очереди отправки price-report
При отправке нескольких цен — последовательные fetch без учёта ошибок и retry. Нет пакетного эндпоинта.
⚠️ Нет аутентификации
Избранное и отчёты привязаны к случайному токену в localStorage. При смене устройства всё теряется. Нет OAuth/соцсетей.
⚠️ Нет Docker / CI
Локальный запуск через start.bat. Нет контейнеризации, автоматических тестов, деплоя.
9. Приоритетные доработки (roadmap)
| Приоритет | Что сделать | Сложность | Эффект |
| P0 | Автообновление OSM-данных (Overpass) | 2 дня | Новые АЗС, актуальные теги |
| P0 | График цен по дням (история) | 1 день | Вовлечение, доверие к данным |
| P0 | PWA + push-уведомления | 2 дня | Возврат пользователей |
| P1 | Telegram Bot | 2 дня | 50k+ аудитория |
| P1 | Средняя цена по городу | 0.5 дня | Полезно для всех |
| P1 | Уведомления о снижении цены | 1 день | Киллер-фича |
| P1 | Карта цен (heatmap) | 1 день | Визуально мощно |
| P2 | Маршрут с дозаправкой | 2 дня | Уникальная фича |
| P2 | История заправок (личный кабинет) | 2 дня | Удержание |
| P2 | Расход топлива tracker | 1.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)
Поиск по названию/бренду
Отчёт создан автоматически на основе анализа кода проекта. Рекомендации основаны на исследовании рынка.