Files
polymarket-5min-15min-1hour…/btc-binary-VWAP-Momentum-bot/debug_list_markets.py
T
2026-07-26 22:56:35 +08:00

124 lines
4.5 KiB
Python

"""Diagnostic script: list all active BTC binary markets on Polymarket Gamma API.
Usage: python debug_list_markets.py
"""
import os
import asyncio
import json
import aiohttp
from dotenv import load_dotenv
load_dotenv()
def _normalize_proxy(raw: str) -> str:
raw = (raw or "").strip()
if not raw:
return ""
if raw.endswith("/"):
raw = raw[:-1]
if raw.startswith(("http://", "https://", "socks://", "socks4://", "socks5://")):
return raw
return "http://" + raw
_PROXY_URL = _normalize_proxy(
os.getenv("HTTPS_PROXY")
or os.getenv("HTTP_PROXY")
or os.getenv("http_proxy")
or os.getenv("https_proxy")
or ""
)
GAMMA = "https://gamma-api.polymarket.com"
async def main():
print(f"[proxy] Using: {_PROXY_URL or 'NONE'}")
timeout = aiohttp.ClientTimeout(total=45, connect=15)
async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
# Try 3 common queries to find BTC markets
queries = [
# Query 1: active markets with "btc" in slug
{"slug": "btc", "active": "true", "closed": "false", "limit": 50},
# Query 2: active markets with "Bitcoin" in question/title
{"title": "Bitcoin", "active": "true", "closed": "false", "limit": 50},
# Query 3: closed=false, order by newest, with tags
{"closed": "false", "limit": 100, "order": "end_date", "ascending": "false"},
]
seen = set()
all_markets = []
for qi, params in enumerate(queries, 1):
print(f"\n--- Query {qi}: {list(params.keys())} ---")
try:
async with session.get(
f"{GAMMA}/markets",
params=params,
proxy=_PROXY_URL or None,
) as resp:
print(f"HTTP {resp.status}")
if resp.status != 200:
print(await resp.text())
continue
markets = await resp.json()
print(f"Got {len(markets)} markets in response")
except Exception as e:
print(f"Request FAILED: {type(e).__name__}: {e}")
continue
for m in markets:
condition_id = m.get("conditionId") or m.get("id")
if not condition_id or condition_id in seen:
continue
seen.add(condition_id)
title = (m.get("question") or m.get("title") or "").strip()
slug = (m.get("slug") or "").strip()
# Only keep markets mentioning BTC/bitcoin
text = (title + " " + slug).lower()
if "btc" not in text and "bitcoin" not in text:
continue
end = m.get("endDate") or m.get("end_date_iso") or ""
start = m.get("startDate") or m.get("start_date_iso") or ""
active = m.get("active")
closed = m.get("closed")
neg_risk = m.get("negativeRisk")
tokens = m.get("tokens") or []
outcomes = [
(t.get("outcome") or t.get("name") or "?")[:6] for t in tokens
]
all_markets.append({
"id": condition_id[:12],
"slug": slug[:80],
"title": title[:120],
"active": active,
"closed": closed,
"neg_risk": neg_risk,
"start": str(start)[:25],
"end": str(end)[:25],
"outcomes": outcomes,
})
print("\n" + "=" * 120)
print(f"Found {len(all_markets)} BTC-related markets")
print("=" * 120)
for i, m in enumerate(all_markets, 1):
print(f"\n#{i} id={m['id']} active={m['active']} closed={m['closed']} negRisk={m['neg_risk']}")
print(f" slug: {m['slug']}")
print(f" title: {m['title']}")
print(f" outcomes: {m['outcomes']}")
print(f" start: {m['start']}")
print(f" end: {m['end']}")
# Save for later
with open("_debug_btc_markets.json", "w", encoding="utf-8") as f:
json.dump(all_markets, f, ensure_ascii=False, indent=2)
print(f"\nSaved full list to _debug_btc_markets.json")
# Also dump slugs for regex analysis
print("\n--- All slugs (for regex tuning) ---")
for m in all_markets:
print(m["slug"])
if __name__ == "__main__":
asyncio.run(main())