Skip to main content

API 文档

公开只读 API,无需登录。按 IP 限流(每分钟 60 次)。所有时间均为 UTC ISO 字符串。 这些接口只返回公开字段;人工评审备注、用户数据、原始供应商响应不对外。

端点

GET/api/radar/keywords

关键词列表。参数:tab(new / reignited / long_term / game / tool / ai / watch / rejected / all)、q、category、source、sort(latest / heat / recent)、page、pageSize(最大 50)。

curl 'http://localhost:3100/api/radar/keywords?tab=new&pageSize=5'
GET/api/radar/keywords/:id

单个关键词:公开字段、评分拆解、趋势观测点、证据信号、相关词、SERP 历史。可选参数 snapshot=<快照 id> 查看某一次抓取;不传则用最近一次成功抓取。返回 serp.domainStats(域名统计)、serp.description(用搜索结果生成的说明)、每条结果的 positionDelta(排名升降)与 serpHistory(历史快照列表)。机会分为 null 表示缺少 SERP/搜索量证据。

GET/api/radar/stats

站点统计:总词数、新词、二次爆火、长期大词、今日新增、最近扫描时间。

GET/api/radar/activity

最近 20 次扫描记录,以及每批实际首次发现的词。

GET/api/radar/trends

已抓取关键词的 12 个月 Google Trends 序列与摘要:最新指数、30/90 天变化、方向、季节性、峰值月。0–100 是相对热度,不是搜索量。抓取策略:1 个/分钟、7 天刷新、无数据/失败 24h 后重试、每 50 个请求休息 2 小时;本端点最多返回 50 条摘要(只是响应大小限制)。

字段口径(重要)

字段含义不是什么
trendScore0–100,热度与增长信号不是搜索量,也不是机会分
opportunityScore0–100,做站机会;可能为 null不是预测收入;缺 SERP 时不算
confidence0–100,证据可靠度不是项目成功概率
approxTrafficGoogle Trends 热搜量级(如 200+)不是月搜索量,也不是精确值
verdictvalidate / watch / need_data / defer / reject不是「保证赚钱」的结论
relative_index_0_100Google Trends 固定地区/窗口下的相对热度不是搜索次数;不同窗口/地区不可直接比较
serp.position某次 Google SERP 观察到的名次(前 5 页,最多约 50 条)不是流量;同一站点不同关键词/地区/设备结果不同
positionDelta与同口径的上一次快照相比的排名变化;正数 = 上升不是流量变化;两次快照的抓取深度不同时只比较共同深度
serp.domainStats按域名聚合:结果数、最好/平均排名、与上次的变化不是域名流量或权重;只统计本次抓到的前 5 页
trends.statusok / empty / error / never;代表最近一次抓取结果不是搜索量;empty/error 表示本次没拿到序列
isTargetHosting是否 pages.dev / vercel.app / github.io 等免费托管域名不是「小站一定有流量」的证据
sourceCount独立来源数(Trends / HN / GitHub…)不是流量来源数

需要配置的能力

SERP 排名 / 前 5 页域名统计需要配置 SERPAPI_KEY; 未配置时返回 null 或显示「未配置」。搜索量(Keyword Planner)、DR、竞品真实流量仍需要付费/授权数据源。 所有缺数据字段返回 null 或「待补」,不会用 0 或估算值伪装。

错误

{ "ok": false, "error": "RATE_LIMITED" }   // HTTP 429
{ "ok": false, "error": "NOT_FOUND" }      // HTTP 404