BingX Launchpool Pipeline
Overview
Для BingX Launchpool используется browser scraping через Playwright.
Прямой API-клиент без браузера нестабилен из-за Cloudflare/anti-bot ограничений.
Текущая реализация:
- ScrapeBingXLaunchpoolWorkflow — получает структурированный список проектов/подпулов;
- SyncBingXLaunchpoolWorkflow — вызывает scraping и пишет snapshots в Timescale через SQL ingest.
Код:
- internal/worker/activities/scrape_bingx_launchpool.go
- internal/worker/activities/sync_bingx_launchpool.go
- internal/db/migrations/00007_bingx_launchpool_snapshot_schema.sql
- internal/db/migrations/00008_bingx_launchpool_aggregates_policies.sql
Web Endpoints (UI)
Primary:
- https://bingx.com/en/launchpool/overview
- https://bingx.com/en/launchpool/detail?currency=<project_id>
Legacy fallback (используется при недоступности primary path):
- https://bingx.com/en/xpool/overview
- https://bingx.com/en/xpool/detail?currency=<project_id>
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 (legacy fallback)
- /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_launchpool_snapshot($1::jsonb)
Payload source:
- internal path /playwright/bingx/launchpool
- source marker playwright
- список projects[] из scraper activity
Target tables:
- fct_bingx_launchpool_snapshot
- fct_bingx_launchpool_subpool_snapshot
- fct_bingx_launchpool_response_snapshot
- fct_bingx_launchpool_quarantine
- fct_bingx_launchpool_5min
- fct_bingx_launchpool_daily
Manual Runs
Scraping only:
docker compose exec -T temporal temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type ScrapeBingXLaunchpoolWorkflow \
--workflow-id scrape-bingx-launchpool-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 SyncBingXLaunchpoolWorkflow \
--workflow-id sync-bingx-launchpool-manual-$(date +%s) \
--input '{"include_details":true}'
Diagnostics Artifacts
- Full request log:
docs/api/bingx-launchpool-requests.json - Capture helper script:
docs/check_launchpool_api.py