新手入门:Polymarket API Clob库实战教程(附可直接运行代码)

简介

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,避免误操作造成大额损失。
  • 订单提交前,务必确认 pricesizeside 参数正确,一旦提交无法撤回。

四、常见问题排查(避坑方向)

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 为当前市场合理价格。

五、官方资源参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱兜圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值