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}