Skip to content

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