把「现在谁在频率上」接进你的机器人、桌面小工具、HamClock 或者群里。全部免费、无需注册、不用 API Key。
{"ok": true, "data": ...},出错是 {"ok": false, "error": "原因"}。Access-Control-Allow-Origin: *),浏览器里可以直接 fetch。429 与 Retry-After。请缓存 30 秒以上,别拿它当实时总线。GET /api/spots?since=<版本号> 轮询增量,比拉全量省 95% 流量。| 参数 | 说明 |
|---|---|
lat, lon | 你的位置。带上就会给每条记录补 distanceKm / bearing / bearingText。 |
maxKm | 只回这个半径内的点位(需同时带 lat/lon)。 |
band | 频段,如 2m / 70cm / 20m;all 或不传为全部。 |
mode | 模式:FM / SSB / CW / FT8 等。 |
status | CQ(在呼叫)/ QRV(可通联)/ QSO(通联中)。 |
callsign | 呼号前缀或片段,服务端做包含匹配。 |
limit | 条数,默认 200,上限 500。 |
since | 增量模式:传上次响应的 v,只回变化过的条目(含 {id, del:1} 删除标记)。 |
# 找 145.500 附近 50 公里内的 FM 台 curl "https://ham-spot.app.workbuddy.host/api/spots?lat=39.9042&lon=116.4074&maxKm=50&band=2m&mode=FM" # 返回(节选) { "ok": true, "data": { "v": 1793, "total": 1, "items": [{ "id": "6f3a91c2", "callsign": "BG7XSS", "freq": 145.5, "band": "2m", "mode": "FM", "status": "CQ", "freqType": "simplex", "lat": 39.9, "lon": 116.41, "precision": 2, "antenna": "橡皮鸭", "power": "5W", "updatedAt": 1792240000000, "expiresAt": 1792247200000, "distanceKm": 1.2, "bearing": 87, "bearingText": "东" }] } }
中继台:freqType 为 repeater 时,freq 等于下行,
freqOut / freqIn / tone 分别是下行、上行、哑音。
当前守听人数最多的频率排行,适合做「今天大家都在哪」的小组件。
{ "ok": true, "data": { "alive": 42, "items": [
{ "freq": 145.5, "count": 9, "modes": { "FM": 9 } },
{ "freq": 438.5, "count": 5, "modes": { "FM": 5 } }
] } }
频段表 bands、常用频率 callFreqs、模式/台型/功率/天线枚举、默认位置精度、打卡有效期上限等。做客户端时直接读这份,别在代码里抄一遍。
当前在线、今日峰值、今日打卡数、频段/模式分布。关于页用的就是它。
SFI / A / K / 黑子数 + 各波段白天夜间 Poor–Fair–Good(数据来源 HamQSL / N0NBH,服务端缓存 30 分钟)。
取不到时可能返回 503,或有 stale: true 的旧值。
轻量、无副作用,给 UptimeRobot 之类的监控用:status / version / spots / online / mode。
当前安装包的版本号、大小、上传时间;/api/app/download 取文件本体。
一个每 60 秒刷新、只显示 2 米波段在线台的小脚本:
// Node 18+ / 浏览器都行
const r = await fetch('https://ham-spot.app.workbuddy.host/api/spots?band=2m&limit=50')
const { data } = await r.json()
for (const s of data.items) {
console.log(`${s.callsign} ${s.freq} MHz ${s.mode} ${s.status} · ${s.distanceKm ?? '?'} km`)
}