法律合規提醒:在使用 Polymarket 服務或 API 前,請確認您所在地區的法律規定。Polymarket 目前不支援比利時、法國、新加坡、泰國、中國大陸等地區,政策可能隨時變化。
了解如何檢查 Polymarket CLOB API 的運行狀態和健康狀況。
API 狀態檢查
健康檢查端點
Polymarket 提供健康檢查端點來驗證 API 是否正常運行。
curl https://clob.polymarket.com/health
響應示例:
{
"status": "ok",
"timestamp": "2024-01-15T10:30:00Z"
}
Python 檢查
import requests
def check_clob_status():
try:
response = requests.get('https://clob.polymarket.com/health')
if response.status_code == 200:
data = response.json()
print(f"✓ CLOB API 狀態: {data.get('status', 'ok')}")
return True
else:
print(f"✗ CLOB API 返回狀態碼: {response.status_code}")
return False
except Exception as e:
print(f"✗ 無法連接到 CLOB API: {e}")
return False
check_clob_status()
TypeScript 檢查
async function checkClobStatus(): Promise<boolean> {
try {
const response = await fetch('https://clob.polymarket.com/health');
if (response.ok) {
const data = await response.json();
console.log(`✓ CLOB API 狀態: ${data.status || 'ok'}`);
return true;
} else {
console.log(`✗ CLOB API 返回狀態碼: ${response.status}`);
return false;
}
} catch (error) {
console.error(`✗ 無法連接到 CLOB API: ${error}`);
return false;
}
}
checkClobStatus();
系統狀態頁面
Polymarket 維護一個公開的狀態頁面,顯示所有服務的當前狀態和歷史正常運行時間。
Polymarket 狀態頁面
查看實時系統狀態和事件歷史
服務組件
Polymarket 的交易基礎設施包括多個組件:
1. CLOB API
- 作用:訂單創建、取消和查詢
- 端點:
https://clob.polymarket.com
- 健康檢查:
/health
2. Gamma API
- 作用:市場數據和元數據
- 端點:
https://gamma-api.polymarket.com
- 健康檢查:
/health
3. Data API
- 作用:歷史數據和分析
- 端點:
https://data-api.polymarket.com
- 健康檢查:
/health
4. WebSocket
- 作用:實時數據流
- 端點:
wss://ws-subscriptions-clob.polymarket.com
5. 區塊鏈網絡
監控腳本
完整的系統監控
import requests
import time
from datetime import datetime
def check_service(name: str, url: str) -> bool:
"""檢查服務是否可用"""
try:
response = requests.get(url, timeout=5)
status = response.status_code == 200
print(f"{'✓' if status else '✗'} {name}: {'在線' if status else '離線'}")
return status
except Exception as e:
print(f"✗ {name}: 離線 ({e})")
return False
def monitor_polymarket():
"""監控所有 Polymarket 服務"""
print(f"\n=== Polymarket 系統狀態檢查 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) ===\n")
services = {
'CLOB API': 'https://clob.polymarket.com/health',
'Gamma API': 'https://gamma-api.polymarket.com/health',
'Data API': 'https://data-api.polymarket.com/health',
}
results = {}
for name, url in services.items():
results[name] = check_service(name, url)
# 總體狀態
all_online = all(results.values())
print(f"\n總體狀態: {'✓ 所有服務正常' if all_online else '✗ 部分服務異常'}\n")
return all_online
# 單次檢查
monitor_polymarket()
# 持續監控(每5分鐘檢查一次)
# while True:
# monitor_polymarket()
# time.sleep(300) # 5分鐘
TypeScript 監控腳本
interface ServiceStatus {
name: string;
online: boolean;
}
async function checkService(name: string, url: string): Promise<ServiceStatus> {
try {
const response = await fetch(url, {
method: 'GET',
signal: AbortSignal.timeout(5000), // 5秒超時
});
const online = response.ok;
console.log(`${online ? '✓' : '✗'} ${name}: ${online ? '在線' : '離線'}`);
return { name, online };
} catch (error) {
console.log(`✗ ${name}: 離線 (${error})`);
return { name, online: false };
}
}
async function monitorPolymarket(): Promise<boolean> {
console.log(`\n=== Polymarket 系統狀態檢查 (${new Date().toLocaleString()}) ===\n`);
const services = {
'CLOB API': 'https://clob.polymarket.com/health',
'Gamma API': 'https://gamma-api.polymarket.com/health',
'Data API': 'https://data-api.polymarket.com/health',
};
const results = await Promise.all(
Object.entries(services).map(([name, url]) => checkService(name, url))
);
const allOnline = results.every(r => r.online);
console.log(`\n總體狀態: ${allOnline ? '✓ 所有服務正常' : '✗ 部分服務異常'}\n`);
return allOnline;
}
// 單次檢查
monitorPolymarket();
// 持續監控(每5分鐘檢查一次)
// setInterval(monitorPolymarket, 5 * 60 * 1000);
性能指標
響應時間
正常情況下的預期響應時間:
| 端點類型 | 平均響應時間 |
|---|
| 健康檢查 | < 100ms |
| 市场查询 | < 200ms |
| 订单簿查询 | < 300ms |
| 订单创建 | < 500ms |
| 订单取消 | < 400ms |
测量响应时间
import requests
import time
def measure_response_time(url: str) -> float:
start = time.time()
response = requests.get(url)
end = time.time()
return (end - start) * 1000 # 轉換為毫秒
# 測試 CLOB API
clob_time = measure_response_time('https://clob.polymarket.com/health')
print(f"CLOB API 響應時間: {clob_time:.2f}ms")
# 測試 Gamma API
gamma_time = measure_response_time('https://gamma-api.polymarket.com/health')
print(f"Gamma API 響應時間: {gamma_time:.2f}ms")
常見問題
API 返回 502/503 錯誤
可能原因:
解決方案:
- 檢查 Polymarket 狀態頁面
- 等待幾分鐘後重試
- 實施指數退避重試策略
WebSocket 連接失敗
可能原因:
- WebSocket 服務離線
- 網絡防火牆阻止 WebSocket
解決方案:
- 檢查 WebSocket 端點狀態
- 驗證防火牆設置
- 使用備用 REST API 輪詢
訂單延遲
可能原因:
解決方案:
- 檢查 Polygon 網絡狀態
- 增加超時時間
- 監控訂單狀態
狀態通知
設置警報
import requests
import smtplib
from email.mime.text import MIMEText
def send_alert(subject: str, message: str):
"""發送郵件警報"""
# 配置您的郵件設置
sender = "[email protected]"
recipient = "[email protected]"
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = recipient
# 發送郵件(需要配置 SMTP 伺服器)
# smtp = smtplib.SMTP('smtp.gmail.com', 587)
# smtp.send_message(msg)
print(f"警報: {subject} - {message}")
def monitor_with_alerts():
"""監控並在出現問題時發送警報"""
previous_status = True
while True:
current_status = check_clob_status()
# 狀態變化時發送警報
if previous_status and not current_status:
send_alert(
"Polymarket CLOB 離線",
"CLOB API 當前無法訪問"
)
elif not previous_status and current_status:
send_alert(
"Polymarket CLOB 恢復",
"CLOB API 已恢復正常"
)
previous_status = current_status
time.sleep(60) # 每分鐘檢查一次
下一步