On the wire · 04:34:25 UTC Live 547 · Prematch 14,368 · Markets 56,914 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
回答 · Node.js · WebSocket

NodeのMapにピナクルWebSocketのsnapshotとdeltaを適用する

更新日 · PinnFeed · 約1分で読めます

回答: subscribe のあと、市場の id(eventId:key)をキーにした Map に snapshot の各 part を入れ、その後各 delta の changes[](upsert/remove)を適用します。完全なクライアント:Python/Nodeガイド。Builder(月額99ユーロ)が必要です。

マージの核心#

import WebSocket from "ws";

const markets = new Map(); // id -> market object
const KEY = process.env.PINNFEED_KEY;

function applyChange(ch) {
  if (ch.op === "upsert" || ch.type === "upsert") {
    const m = ch.market || ch.value;
    markets.set(m.id, m);
  } else if (ch.op === "remove" || ch.type === "remove") {
    markets.delete(ch.id || ch.marketId);
  }
}

const ws = new WebSocket("wss://pinnfeed.io/v1/stream", {
  headers: { "x-api-key": KEY },
  perMessageDeflate: true,
});

ws.on("open", () => {
  ws.send(JSON.stringify({
    type: "subscribe",
    sports: ["soccer"],
    markets: ["moneyline"],
    main: true,
  }));
});

ws.on("message", (buf) => {
  const msg = JSON.parse(buf.toString());
  if (msg.type === "ping") return ws.send(JSON.stringify({ type: "pong" }));
  if (msg.type === "snapshot" || msg.part != null) {
    for (const m of msg.markets || []) markets.set(m.id, m);
  }
  if (msg.type === "delta" && Array.isArray(msg.changes)) {
    for (const ch of msg.changes) applyChange(ch);
  }
});

フィールド名はWebSocketドキュメントに従います。有料プラン:3日間のトライアル。カード登録が必要で、解約しない場合は3日目の後に課金されます。

関連:snapshotとdelta · Node再接続 · rawフレーム(Pro)。

18歳以上の方を対象とした教育目的のコンテンツです。予想や利益の約束ではありません。日本では刑法により賭博は原則として禁止されています。

よくある質問#

イベントも同じようにマージしますか?#

はい。home/awayのメタデータが必要ならイベント用の Map を別に持ってください。snapshotとdeltaの両方に載ることがあります。

なぜBuilder?#

Free/HobbyのキーはWebSocketで 403 plan_lacks_ws になります。RESTのポーリングはFreeで動きますが、プッシュにはBuilderまたはProが必要です。

WebSocketプラン:Builder、月額99ユーロ

ピナクルのオッズを1本のWebSocketでリアルタイムに。全13競技、全マーケット、マージンなしのフェアオッズとクロージングオッズ。3日間無料、ワンクリックで解約できます。

Form K-1 · Free API key

Get your free API key.

One field. No password, no card: enter your email, click the link we send, and your key is on screen.

By continuing you agree to the Terms and Privacy Policy.

One free key per email. Link valid for 20 minutes.