{"message":"海洋预报数据API服务","publicDomain":"haiyang.life","publicApiBase":"https://haiyang.life","baseUrl":"https://haiyang.life","version":"2.1.0","apis":[{"method":"GET","path":"/browse","desc":"浏览器导航页（可点击打开各数据接口，使用对外域名）","check":"返回 HTML"},{"method":"GET","path":"/api/position/forecast","desc":"海洋点位预报（王魔方 HTTP 转接）；?LatLng=纬度,经度","check":"返回预报 JSON 数组；支持 lat/lng 或 LatLng"},{"method":"GET","path":"/api/health","desc":"存活与运行状态","check":"JSON.status 为 healthy 或 degraded；含 server.uptime"},{"method":"GET","path":"/api/status","desc":"各爬虫内存态与优化器状态","check":"legacy.dataSources 各 available；optimized.realTime 有统计"},{"method":"GET","path":"/api/zoom-embryo","desc":"台风胚胎：每次直连 Zoom+EasterlyWave；双源失败时 success false 且无历史缓存","check":"HTTP 200；成功时 zoomEarth/easterlyWave；失败时 success false"},{"method":"GET","path":"/api/jma-forecast","desc":"JMA 预报图等","check":"success true 且含 jam 或缓存字段"},{"method":"GET","path":"/api/cma-weather","desc":"CMA 天气图/雷达等","check":"success true 或含 radar 字段"},{"method":"GET","path":"/api/sst-data","desc":"海温数据","check":"success true 或 body 含海温字段"},{"method":"GET","path":"/api/wztf-active","desc":"温州台风网当前活跃（每30分钟拉源写入实时管理器，读盘返回；连续3次定时拉取失败则 success false 且无旧快照）","check":"正常时 success true；数据源连续失败时 success false，data.typhoons 为空"},{"method":"GET","path":"/api/wztf-historical/2026","desc":"历史台风（当年示例 2026）","check":"success true；data 为数组（无文件时可能为空数组）"},{"method":"GET","path":"/api/wztf-historical/:year","desc":"历史台风指定年","check":"同上，year 1949–今年"},{"method":"GET","path":"/api/wztf-stats","desc":"历史与实时统计","check":"stats.realTime 存在；stats.historical 可能为 null"},{"method":"GET","path":"/api/images/cma/","desc":"CMA 图片列表（可加文件名）","check":"available_images 数组"},{"method":"GET","path":"/api/images/jma/","desc":"JMA 图片列表","check":"同上"},{"method":"GET","path":"/api/images/sst/","desc":"海温图片列表","check":"同上"},{"method":"GET","path":"/api/images/nmc/","desc":"NMC 图片列表","check":"同上"},{"method":"GET","path":"/api/imgs/:type/:filename?","desc":"通用图片 type=cma|jma|sst|nmc|zoom|easterly","check":"列表或二进制图片"},{"method":"POST","path":"/api/refresh","desc":"手动触发各源拉取并更新缓存/实时","check":"success true；detail 内各 success"}],"endpoints":{"oceanPositionForecast":"https://haiyang.life/api/position/forecast?LatLng=21,121","typhoonEmbryo":"https://haiyang.life/api/zoom-embryo","jmaForecast":"https://haiyang.life/api/jma-forecast","cmaWeather":"https://haiyang.life/api/cma-weather","sstData":"https://haiyang.life/api/sst-data","wztfActive":"https://haiyang.life/api/wztf-active","wztfHistorical":"https://haiyang.life/api/wztf-historical/:year","wztfStats":"https://haiyang.life/api/wztf-stats","health":"https://haiyang.life/api/health","status":"https://haiyang.life/api/status","refresh":"https://haiyang.life/api/refresh"},"endpointsCanonical":{"oceanPositionForecast":"https://haiyang.life/api/position/forecast?LatLng=21,121","typhoonEmbryo":"https://haiyang.life/api/zoom-embryo","jmaForecast":"https://haiyang.life/api/jma-forecast","cmaWeather":"https://haiyang.life/api/cma-weather","sstData":"https://haiyang.life/api/sst-data","wztfActive":"https://haiyang.life/api/wztf-active","wztfHistorical":"https://haiyang.life/api/wztf-historical/2026","wztfStats":"https://haiyang.life/api/wztf-stats","health":"https://haiyang.life/api/health","status":"https://haiyang.life/api/status","refresh":"https://haiyang.life/api/refresh","browse":"https://haiyang.life/browse"}}