简介
Polymarket 是知名的预测市场平台,其开放 API 支持开发者快速接入市场数据、创建订单等操作。对于新手来说,无需从零搭建请求逻辑,借助官方推荐的 py_clob_client 库就能快速上手。这篇文章会带大家从环境准备到实际调用,一步步打通 Polymarket API,代码可直接复制使用
一、前置准备:3 件事搞定入门前提
在写代码前,先完成基础配置,避免后续踩坑。
1. 环境与依赖安装
- 确保本地安装 Python 3.8+(推荐 3.9-3.11 版本,兼容性更好)
- 安装核心依赖库
py_clob_client,打开终端执行命令:pip install py_clob_client - 可选依赖:如果需要更详细的日志查看,可安装
logging增强工具(默认 Python 自带,无需额外安装)
2. 必备身份信息获取
代码中需要 2 个核心身份参数,必须提前获取,且绝对不能泄露给他人:
| 参数名称 | 作用 | 获取路径 |
|---|---|---|
| 私钥(key) | 身份验证核心,关联你的 Polymarket 账户 | 1. 登录 Polymarket 官网(https://polymarket.com)2. 通过 Email/Magic 登录的用户:访问 https://reveal.magic.link/polymarket 导出3. 钱包登录(如 Metamask)的用户:从钱包中导出私钥(注意:不是助记词) |
| 代理地址(POLYMARKET_PROXY_ADDRESS) | 订单路由地址,平台分配的个人专属地址 | 1. 登录 Polymarket 官网2. 进入个人资料页(右上角头像 → Profile)3. 在页面中找到「Proxy Address」字段,复制完整地址 |
3. 测试用 Token ID 获取(可选)
如果要测试创建订单功能,需要获取具体市场的 Token ID(对应某个预测市场的 YES/NO 选项):
- 访问 Polymarket 官方市场列表(https://polymarket.com/markets)
- 选择任意市场,进入市场详情页
- 从浏览器地址栏或页面源码中提取 Token ID(也可参考官方 API 文档的示例 Token ID)
二、完整代码解析(可直接复制运行)
from py_clob_client.client import ClobClient
from py_clob_client.clob_types import OrderArgs
from py_clob_client.order_builder.constants import BUY
import logging
# 配置日志:打印请求时间、日志级别和内容,方便排查问题
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
# --------------------------
# 核心参数配置(新手必须替换!)
# --------------------------
host: str = "https://clob.polymarket.com" # Polymarket 官方 API 地址(固定不变)
key: str = "YOUR_PRIVATE_KEY_HERE" # 替换为你的私钥(从邮箱登录页或钱包导出)
chain_id: int = 137 # 固定为 137(Polymarket 基于 Polygon 链运行)
POLYMARKET_PROXY_ADDRESS: str = "YOUR_PROXY_ADDRESS_HERE" # 替换为你的代理地址(个人资料页获取)
test_token_id: str = "YOUR_TEST_TOKEN_ID_HERE" # 替换为测试市场的 Token ID(可选,不填则跳过订单测试)
def test_polymarket_client():
try:
# 1. 初始化 API 客户端(登录方式二选一)
logger.info("开始初始化 Polymarket API 客户端...")
client = ClobClient(
host=host,
key=key,
chain_id=chain_id,
signature_type=1, # 登录方式:1=Email/Magic 登录;2=钱包(Metamask 等)登录
funder=POLYMARKET_PROXY_ADDRESS # 绑定你的代理地址
)
logger.info("✅ 客户端初始化成功(已关联你的 Polymarket 账户)")
# 2. 验证 API 凭证(必须步骤,否则无法调用后续接口)
logger.info("验证 API 访问权限...")
api_creds = client.create_or_derive_api_creds() # 生成/获取访问凭证
client.set_api_creds(api_creds) # 绑定凭证到客户端
logger.info("✅ API 凭证验证成功(已获得访问权限)")
# 3. 测试基础接口:获取市场列表(无权限限制,适合新手验证)
logger.info("调用接口:获取 Polymarket 市场列表...")
markets = client.get_markets() # 调用官方 /markets 接口,返回所有市场数据
markets_list = markets.get("data", []) # 提取市场列表(默认返回字典,data 字段为列表)
limited_markets = markets_list[:5] # 只展示前 5 个市场(避免输出过多)
logger.info(f"✅ 成功获取市场列表,前 5 个市场:{limited_markets}")
# 4. 可选测试:创建并提交订单(需有效 Token ID,谨慎操作!)
if test_token_id: # 只有填写了 test_token_id 才执行这一步
logger.info("开始测试创建订单(仅签名,未提交)...")
# 构造订单参数
order_args = OrderArgs(
price=0.01, # 订单价格(单位:USDc,最小精度 0.01)
size=1.0, # 订单数量(最小 1 单位,对应 1 USDc 左右的价值)
side=BUY, # 订单方向:BUY=买入(看好该结果),SELL=卖出(不看好)
token_id=test_token_id # 关联的市场 Token ID
)
# 签名订单(本地签名,未提交到平台)
signed_order = client.create_order(order_args)
logger.info("✅ 订单签名成功(本地完成,未上链)")
# 注意:以下代码会实际提交订单到 Polymarket,测试时建议注释!
# 如需正式提交,取消注释并确保账户有足够 USDc 余额
# resp = client.post_order(signed_order, order_type="GTC") # GTC=挂单(未成交前一直有效)
# logger.info(f"✅ 订单提交成功,响应结果:{resp}")
logger.info("\n🎉 所有测试步骤执行完成,Polymarket API 访问正常!")
except Exception as e:
# 捕获所有异常,打印错误信息和堆栈(方便排查问题)
logger.error(f"\n❌ 测试失败:{str(e)}", exc_info=True)
if __name__ == "__main__":
# 运行前检查必填参数是否填写
if not all([key.strip() != "YOUR_PRIVATE_KEY_HERE", POLYMARKET_PROXY_ADDRESS.strip() != "YOUR_PROXY_ADDRESS_HERE"]):
logger.error("❌ 请先替换必填参数:key(私钥)和 POLYMARKET_PROXY_ADDRESS(代理地址)")
else:
test_polymarket_client()
三、关键代码详解
1. 客户端初始化核心参数
signature_type:登录方式标识,1 对应 Email/Magic 登录,2 对应钱包登录,填错会导致验证失败。funder:必须填写你的代理地址,否则订单无法路由到你的账户。chain_id:固定为 137,Polymarket 仅支持 Polygon 链,修改后会报错。
2. 接口调用优先级
- 新手先测试
get_markets()接口(无权限限制,无需余额),确认 API 能正常访问。 - 再测试订单签名(
create_order),无需实际提交,验证参数格式是否正确。 - 最后测试订单提交(
post_order),确保账户有足够 USDc 余额(Polymarket 交易用 USDc 结算)。
3. 安全注意事项(重中之重)
- 私钥(key)绝对不能上传到 GitHub、公开文档等地方,泄露会导致账户资产被盗。
- 测试环境建议使用小额 USDc,避免误操作造成大额损失。
- 订单提交前,务必确认
price、size、side参数正确,一旦提交无法撤回。
四、常见问题排查(避坑方向)
1. 客户端初始化失败
- 错误原因:私钥格式错误、代理地址填写错误、网络无法访问 Polygon 链。
- 解决方法:检查私钥是否完整(通常 64 位十六进制字符串)、代理地址是否复制完整、开启科学上网(需支持 Polygon 链节点访问)。
2. API 凭证验证失败
- 错误原因:
signature_type与登录方式不匹配、私钥与代理地址不绑定。 - 解决方法:确认登录方式(Email 还是钱包),对应修改
signature_type;检查代理地址是否是当前账户的(不是其他账户的)。
3. 订单签名失败
- 错误原因:
token_id无效、price/size超出平台限制。 - 解决方法:确认
token_id是从官方市场获取的有效 ID;price最小 0.01,size最小 1.0。
4. 订单提交失败
- 错误原因:账户 USDc 余额不足、市场已关闭、订单价格超出当前市场波动范围。
- 解决方法:给账户充值 USDc(Polygon 链上的 USDc);选择未关闭的市场;调整
price为当前市场合理价格。
五、官方资源参考
- 官方 API 文档:https://docs.polymarket.com/ (包含所有接口详细说明)
py_clob_client库文档:https://pypi.org/project/py-clob-client/ (依赖库最新版本更新)- 市场 Token ID 查询:https://clob.polymarket.com/api/v1/markets (官方接口,返回所有市场的 Token ID)
6971

被折叠的 条评论
为什么被折叠?



