生成的 Polymarket 链接返回 "Oops...we didn't forecast this" 错误页面,即使 HTTP 状态码是 200。
Polymarket API 返回两种不同的 slug:
| 字段 | 名称 | 用途 |
|---|---|---|
slug |
Market Slug | 市场标识,不能用于 URL |
events[0].slug |
Event Slug | 事件标识,必须用于 URL |
市场: "Lighter market cap (FDV) >$1B one day after launch?"
API 返回:
slug: "lighter-market-cap-fdv-1b-one-day-after-launch" ❌ 错误
events[0].slug: "lighter-market-cap-fdv-one-day-after-launch" ✅ 正确
错误链接: https://polymarket.com/event/lighter-market-cap-fdv-1b-one-day-after-launch
正确链接: https://polymarket.com/event/lighter-market-cap-fdv-one-day-after-launch
注意差异:market slug 包含 -1b-,event slug 不包含。
Polymarket 前端是 SPA(单页应用):
- 所有
/event/*路径都返回 HTTP 200(返回 HTML 壳) - 前端 JS 加载后再请求数据
- 如果 slug 无效,前端显示 "Oops" 错误
结论:HTTP 状态码无法验证链接有效性。
// ✅ 正确
const getLink = (market) => {
const events = market.events || [];
const slug = events[0]?.slug || market.slug; // 优先用 event slug
return `https://polymarket.com/event/${slug}`;
};
// ❌ 错误
const getLink = (market) => {
return `https://polymarket.com/event/${market.slug}`;
};{
"question": "Lighter market cap (FDV) >$1B one day after launch?",
"slug": "lighter-market-cap-fdv-1b-one-day-after-launch",
"events": [
{
"slug": "lighter-market-cap-fdv-one-day-after-launch",
"title": "Lighter Market Cap (FDV) One Day After Launch"
}
]
}不能只检查 HTTP 状态码,需要:
# 方法1:检查页面内容是否包含错误
curl -s "https://polymarket.com/event/xxx" | grep -q "didn't forecast" && echo "无效"
# 方法2:对比 API 返回的 slug
curl -s "https://gamma-api.polymarket.com/markets?slug=xxx" | jq '.events[0].slug'修复时需检查以下文件中的链接生成逻辑:
scripts/csv-report-api.jsscripts/csv-report.jssignals/*/formatter.js(如有生成链接)
- 日期: 2024-12-31
- 问题: csv-report-api.js 使用
m.slug生成链接 - 修复: 改为
m.events[0]?.slug || m.slug
规则:任何生成 Polymarket 链接的代码,必须使用 events[0].slug,不能使用 slug。