API de mouvement de ligne Pinnacle
Réponse : PinnFeed fournit trois pièces : le flux live (delta sur le WebSocket Builder), les baisses récentes (GET /v1/drops) et le prix de clôture (GET /v1/closing, Builder). Il n'y a pas d'endpoint d'historique tick-à-tick : pour un graphique complet, enregistrez les deltas dès l'abonnement. Le script ci-dessous écrit chaque changement dans SQLite.
Record deltas (Python, Builder)#
# pip install websockets
import asyncio, json, os, sqlite3, time, websockets
db = sqlite3.connect("moves.db")
db.execute("create table if not exists moves(ts real, market_id text, event_id int, type text, line real, outcome text, decimal real)")
async def main():
url = "wss://pinnfeed.io/v1/stream"
async with websockets.connect(url, additional_headers={"x-api-key": os.environ["PINNFEED_KEY"]}, max_size=None) as ws:
await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "markets": ["moneyline", "total"], "main": True}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send(json.dumps({"type": "pong"}))
elif msg["type"] == "delta":
for ch in msg["changes"]:
if ch["kind"] == "market" and ch["op"] == "upsert":
m = ch["market"]
for o in m["outcomes"]:
db.execute("insert into moves values(?,?,?,?,?,?,?)",
(time.time(), m["id"], m["eventId"], m["type"], m.get("line"), o["name"], o["decimal"]))
db.commit()
asyncio.run(main())
CTA#
Builder (99 €). 3-day trial; card required, charged after day 3 unless cancelled. Free REST: signup. Related: dropping odds, closing/CLV.
Questions fréquentes#
Y a-t-il un historique tick-à-tick ?#
Non. Enregistrez les deltas vous-même.
Contenu éducatif pour adultes ?#
Oui (18+).
Contenu éducatif pour adultes (18+) : ni pronostics ni promesse de gain. En France, seuls les opérateurs agréés par l'ANJ peuvent proposer des paris en ligne.