BingX XPool Pipeline
Overview
Для BingX XPool используется browser scraping через Playwright.
Прямой API-клиент без браузера нестабилен из-за Cloudflare/anti-bot ограничений.
Текущая реализация:
- ScrapeBingXXPoolWorkflow — получает структурированный список проектов/подпулов;
- SyncBingXXPoolWorkflow — вызывает scraping и пишет snapshots в Timescale через SQL ingest.
Код:
- internal/worker/activities/scrape_bingx_xpool.go
- internal/worker/activities/sync_bingx_xpool.go
- internal/db/migrations/00009_bingx_xpool_snapshot_schema.sql
- internal/db/migrations/00010_bingx_xpool_aggregates_policies.sql
Web Endpoints (UI)
https://bingx.com/en/xpool/overviewhttps://bingx.com/en/xpool/detail?currency=<project_id>
Для XPool pipeline используются только
xpoolмаршруты без fallback наlaunchpool.
Captured API Endpoints
Внутри браузерной сессии перехватываются ответы:
- /api/spot-launchpool/v2/entrance
- /api/spot-launchpool/v1/project/process-list
- /api/spot-launchpool/v1/project/completed-list?pageSize=100
- /api/spot-pre-launchpool/v1/project/list
- /api/spot-launchpool/v1/project/config?projectId=... (или currency=...)
Практически:
- v2/entrance содержит метаданные страницы (без списка проектов);
- overview-список проектов приходит через process-list и completed-list;
- detail-данные по подпулам — через project/config;
- при отсутствии нужных полей в API включается fallback на DOM extraction.
Storage Contract
SQL ingestion entrypoint:
- ingest_bingx_xpool_snapshot($1::jsonb)
Payload source:
- internal path /playwright/bingx/xpool
- source marker playwright
- список projects[] из scraper activity
Target tables:
- fct_bingx_xpool_snapshot
- fct_bingx_xpool_subpool_snapshot
- fct_bingx_xpool_response_snapshot
- fct_bingx_xpool_quarantine
- fct_bingx_xpool_5min
- fct_bingx_xpool_daily
Manual Runs
Scraping only:
docker compose exec -T temporal temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type ScrapeBingXXPoolWorkflow \
--workflow-id scrape-bingx-xpool-manual-$(date +%s) \
--input '{"include_details":true}'
Scraping + ingestion:
docker compose exec -T temporal temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type SyncBingXXPoolWorkflow \
--workflow-id sync-bingx-xpool-manual-$(date +%s) \
--input '{"include_details":true}'
Diagnostics Artifacts
- Full request log:
docs/api/bingx-xpool-requests.json - Capture helper script:
docs/check_xpool_api.py