File size: 1,611 Bytes
0ee2df7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | """
Polymarket -- public Gamma API. No auth.
GET https://gamma-api.polymarket.com/markets
"""
import httpx
BASE = "https://gamma-api.polymarket.com/markets"
def run(params: dict) -> dict:
query_text = params.get("query")
active = params.get("active", True)
sort_by = params.get("sort_by", "volume_24hr")
limit = int(params.get("limit", 50))
query = {"active": str(active).lower(), "limit": limit, "order": sort_by}
if query_text:
query["_q"] = query_text # fallback keyword param; Gamma also supports full text search endpoints
resp = httpx.get(BASE, params=query, timeout=15.0)
resp.raise_for_status()
markets = resp.json()
results = []
for m in markets:
outcomes = m.get("outcomePrices")
yes_price = no_price = None
if outcomes:
try:
import json as _json
prices = _json.loads(outcomes) if isinstance(outcomes, str) else outcomes
if len(prices) >= 2:
yes_price, no_price = float(prices[0]), float(prices[1])
except Exception:
pass
results.append(
{
"question": m.get("question"),
"yes_price": yes_price,
"no_price": no_price,
"volume_24hr": m.get("volume24hr"),
"liquidity": m.get("liquidity"),
"end_date": m.get("endDate"),
"url": f"https://polymarket.com/event/{m.get('slug')}" if m.get("slug") else None,
}
)
return {"count": len(results), "results": results}
|