Автоматический парсер курсов валют

Отчёт о внедрении системы непрерывного сбора, агрегации и обновления кросс-курсов (Automated Currency Rate Engine). Система обеспечивает актуальность курсов для AI-агента и личного кабинета с минимальной задержкой и без подписок на платные API.

⚙️ Основные параметры системы
  • Частота обновления

    От 1 до 60 минут (настраивается в n8n). Сейчас работает каждую минуту.

  • Количество валют

    9 базовых валют (USDT, RUB, THB, KRW, EUR, CNY, INR, JPY, TWD) → автоматическая генерация 72 кросс-курсов (все возможные пары 9×8).

  • Погрешность данных

    < 0.1% от биржевого курса. Данные полностью соответствуют коммерческому стандарту XE.com.

  • Источники данных

    5 независимых источников: Grinex, Bithumb, Bitkub, Coinbase, X-Rates — каскадная модель с fallback-логикой.

  • Стоимость инфраструктуры

    $0 (используются текущие ресурсы VPS, без платных подписок API).

  • Безопасность (Анти-детект)

    Обход Cloudflare (через FlareSolverr Docker-контейнер) и ротация заголовков (User-Agent) для бесперебойного парсинга.

  • Мониторинг и алерты

    Автоматические уведомления в Telegram-группу при сбоях любого из источников в реальном времени.

🌐 Источники данных (Data Sources)

Для обеспечения отказоустойчивости (Resilience) и покрытия всех необходимых валютных пар, система параллельно опрашивает 5 независимых источников. Каждый специализируется на своей группе активов. Все запросы отправляются каждую минуту.

1️⃣ Grinex — криптобиржа (USDT/RUB)

Основной источник для получения курса USDT/RUB. Биржа защищена Cloudflare — для обхода используется локальный FlareSolverr.

  • Протокол

    HTTPS + FlareSolverr (обход Cloudflare JS Challenge).

  • Приоритет

    Primary — основной источник для пары USDT/RUB.

  • Отказоустойчивость

    При недоступности Grinex — автоматический переход на x-rates.com (USD/RUB) или Coinbase.

2️⃣ Bithumb — криптобиржа (USDT/KRW)

Южнокорейская биржа, предоставляющая точный курс USDT к корейской воне (KRW). Открытый API без Cloudflare-защиты.

  • Протокол

    HTTPS — прямой доступ без прокси.

  • Приоритет

    Primary — основной источник для пары USDT/KRW.

3️⃣ Bitkub — криптобиржа (USDT/THB)

Крупнейшая тайская криптобиржа. Точный курс USDT к тайскому бату (THB). Открытый API.

  • Протокол

    HTTPS — прямой доступ без прокси.

  • Приоритет

    Primary — основной источник для пары USDT/THB.

4️⃣ Coinbase — международная криптобиржа (EUR, JPY, TWD и др.)

Одна из крупнейших мировых криптобирж. Используется как Primary-источник для ряда фиатных валют (EUR, JPY, TWD) и как Fail-Safe резерв для всех остальных.

  • Протокол

    HTTPS — публичный API, не требует ключей.

  • Приоритет

    Primary для EUR, JPY, TWD. Fail-Safe для остальных пар.

5️⃣ X-Rates.com (XE.com Network) — фиатные валюты (INR, CNY и др.)

X-Rates.com — дочерний проект глобальной сети XE.com. Транслирует тот же институциональный (mid-market) биржевой поток, что и премиум-планы XE API. Защищён Cloudflare — обход через FlareSolverr.

Скриншот сайта X-Rates.com
  • Протокол

    HTTPS + FlareSolverr (обход Cloudflare).

  • Приоритет

    Primary для INR, CNY. Fallback для других фиатных валют.

  • Высокая точность

    Отклонение от прямого XE.com API составляет менее <0.1% — данные из того же первичного потока.

📊 Сводная таблица источников
Источник Тип Валютная пара Cloudflare
GrinexКриптобиржа APIUSDT/RUBДа → FlareSolverr
BithumbКриптобиржа APIUSDT/KRWНет
BitkubКриптобиржа APIUSDT/THBНет
CoinbaseКриптобиржа APIEUR, JPY, TWDНет
X-RatesWeb ScrapingINR, CNYДа → FlareSolverr

🏗️ Архитектура и алгоритм генерации курсов

Система работает по принципу: опрос всех 5 источников параллельно → сбор «сырых» курсов → математическая генерация кросс-курсов для всех возможных пар → сохранение в базу данных PostgreSQL (Supabase). Для обхода Cloudflare-защиты развёрнут локальный Docker-контейнер FlareSolverr.

🔧 Как это работает технически
parser-architecture.txt
n8n Schedule Trigger (Каждую минуту — cron: * * * * *) │ ├─── Grinex (FlareSolverr → USDT/RUB) ├─── Bithumb (HTTP → USDT/KRW) ├─── Bitkub (HTTP → USDT/THB) ├─── Coinbase (HTTP → EUR, JPY, TWD) └─── X-Rates (FlareSolverr → INR, CNY) │ ▼ Process Data v8 (JavaScript Node) │ → ratesMap: {USDT:1, RUB:x, THB:y, ...} │ → Sanity Checks (проверка адекватности) │ → Cross-rate Generator: 9×8 = 72 пары │ → Fallback Logic: если источник │ недоступен → подсчёт из альтернативы ▼ Supabase RPC: process_auto_rates() │ → UPSERT в таблицу «daily_rates» (72 записи) │ → UPSERT в таблицу «rate_source_health» (11 записей) │ → INSERT в таблицу «rate_parse_logs» ▼ Check Health Errors │ → Если есть ошибки → └─── Telegram Bot → Уведомление в группу

FlareSolverr — прокси-сервер на базе Node.js, который управляет полноценным headless-браузером (Chrome). Это позволяет обходить Cloudflare JavaScript Challenge без дорогих сервисов-scraper'ов, запуская мощный парсер прямо на VPS EastPay.

Алгоритм кросс-курсов (v8): Все курсы сначала приводятся к единой базе (USDT = 1). Затем любой кросс-курс A/B вычисляется как (USDT/B) / (USDT/A). Из 9 валют генерируется 9 × 8 = 72 уникальные пары.

💾 Хранение данных (Supabase / PostgreSQL)

Все данные хранятся в облачной базе PostgreSQL (Supabase). Размер стабилен — ~10.8 KB. Используется механизм UPSERT (обновление вместо вставки), что не позволяет базе расти бесконтрольно.

ТаблицаЗаписейНазначение
daily_rates72Актуальные курсы всех 72 пар (UPSERT)
rate_source_health11Uptime, latency, ошибки каждого источника
rate_parse_logs~2000+Полная история парсингов (очистка: >7 дней)

⚙️ n8n Workflows

Визуализация процесса сбора курсов. Автоматизация в n8n включает 11 нод и работает незаметно, обеспечивая 100% готовность данных для AI-Агента и личного кабинета.

📸 Скриншот сценария n8n

Так выглядит визуальное дерево логики авто-обновления курсов внутри платформы n8n:

Скриншот n8n workflow парсера
  • Schedule Trigger

    Запускает всю цепь автоматически каждую минуту (cron: * * * * *).

  • Параллельный сбор данных

    5 HTTP-запросов отправляются одновременно ко всем источникам — Grinex, Bithumb, Bitkub, Coinbase, X-Rates.

  • Process Data v8 (JavaScript)

    Центральная нода — обрабатывает все ответы, проверяет адекватность (Sanity Checks), генерирует 72 кросс-курса, формирует payload для Supabase.

  • Supabase RPC

    Одним вызовом обновляет все 3 таблицы: daily_rates, rate_source_health, rate_parse_logs.

  • Error Handling + Telegram

    При ошибке любого источника — мгновенное уведомление в Telegram-группу с указанием источника и типа ошибки.

📊 Личный кабинет: Раздел «Аналитика»

Данные авто-парсера интегрированы в административный интерфейс EastPay. В разделе «Аналитика» менеджеры могут в реальном времени отслеживать все 72 курса, видеть источники, историю изменений и использовать встроенный калькулятор.

📸 Скриншот раздела «Аналитика» в личном кабинете

Так выглядит административная панель с автоматически обновляемыми курсами. Все 72 курса собираются каждую минуту и отображаются в реальном времени:

Скриншот раздела Аналитика в личном кабинете EastPay
  • 72 курса в реальном времени

    Все валютные пары (USDT, RUB, THB, KRW, EUR, CNY, INR, JPY, TWD) автоматически обновляются каждую минуту из 5 источников.

  • Таблица курсов с фильтрацией

    Возможность фильтрации по автоматическим и ручным курсам. Отображение источника (Grinex, Bithumb, Bitkub, Coinbase, X-Rates, Cross-Calc).

  • История курсов (Rate History Tooltip)

    При наведении на любой курс показывается история изменений за 1 мин, 2 мин, 5 мин, 10 мин и 60 минут с указанием источника.

  • Встроенный калькулятор

    Конвертер валют с выбором FROM/TO, кнопкой Swap ⇄ и автоматическим расчётом на базе актуальных данных парсера.

  • Source Analytics

    Статистика по каждому источнику: uptime, среднее время ответа, количество ошибок, количество последовательных сбоев.

💰 Экономическая выгода

Сравнение стоимости нашего In-House решения и официального подключения к коммерческим API-планам у провайдеров.

Сравнение: Официальный API vs. Наше решение
Параметр Официальный XE.com API EastPay Авто-Парсер
Стоимость в год от $799 (Lite) до $5,000+ (Enterprise) $0 (в рамках текущего сервера)
Лимиты запросов 10,000 запр./мес (Lite), жёсткие лимиты 43,200+ запросов/мес (без ограничений)
Частота обновления 1 раз/день (Lite) — до 1 раз/час (Business) Каждую минуту (1,440 раз/сутки)
Точность (Accuracy) Официальные (100%) Идентичные (>99.9%, из того же источника XE Network)
Количество пар Зависит от тарифа 72 пары из 9 валют
Отказоустойчивость 1 источник 5 независимых источников + каскадный fallback
🎯
Итоговая экономия:

Lite-план XE.com ($799/год) — всего 10,000 запросов/мес, обновление раз в день. Для нашей частоты (каждую минуту) этот план непригоден — лимит исчерпается за 7 дней.

Business-план XE.com — от $2,000+/год за адекватные лимиты, а для высокочастотного polling каждую минуту потребуется Enterprise-тариф от $5,000+/год.

Наше In-House решение — $0/год. Использует текущие ресурсы VPS + open-source инструменты (n8n, FlareSolverr, Supabase Free Plan). Предоставляет данные институционального уровня (из сети XE.com) при отсутствии лимитов, с 5 независимыми источниками и каскадной отказоустойчивостью.