v0.1.0 — P2P, copy-trading and announcements
No key, no proxy and no account needed for any mode: measured 2026-09-24 from a datacentre VPS and from a GitHub-hosted runner.
First release. Three modes over binance.com's own JSON endpoints, three
browser engines over one shared fetch loop, and the 2Captcha Scraper API for
the one mode it can reach.
Added
--mode p2p: the P2P order book for an asset/fiat pair. One row per
advert: price, per-order limits, payment methods, time limit, and the
advertiser's 30-day orders, completion and feedback. Both sides of the
trade are kept (sideis what was asked,advertiser_sideis what the
advert says, and they are always opposite).--mode copytrading: Futures copy-trading lead portfolios, one row per
portfolio: ROI, PnL, max drawdown, win rate, AUM, copier PnL, Sharpe,
copiers and seats, badge, the period and the ordering.--mode announcements: one announcement catalogue (new listings,
delistings, news, activities, maintenance, API updates, airdrops), one row
per article, with the site's canonical/detail/{code}address.--urlreads the query from a P2P trade page, the copy-trading page or an
announcement catalogue address; the page itself is never fetched.- Every query parameter is allowlisted, and
--pay-typeis checked against
the site's own list for the fiat, because the API answers several wrong
values with a plausible response instead of an error. - Pages are planned from the total page 1 states; the sidecar records
total_results,pages_availableand the query. - AWS WAF: its CAPTCHA is solved with AmazonTask / AmazonTaskProxyless, and
the solution'sexisting_tokenis set asaws-waf-tokenon the
registrable domain, the arrangement measured to clear it. diff_runs.pydiffs two runs of one mode bysku, over columns derived
from the row class rather than listed by hand.- An offline suite over real, scrubbed API responses, including an
end-to-end run of the shared fetch loop with a fake browser, and a daily
canary of all three modes with no secrets.
Live-verified on 2026-09-24: all three engines through the same seven scenarios, the Scraping Browser API (country-de) on Playwright and pyppeteer (8 of 8 runs), an AWS WAF AmazonTask solve on a gated page, the Scraper API for announcements, and the canary from GitHub in all three modes.