
NASA 开放数据源
Use when the user asks for NASA / space / astronomy data — astronomy picture of the day, near-earth asteroids, Mars rover photos, space weather, Earth imagery (keywords:NASA、天文、每日天文图、APOD、近地小行星、小行星、火星车、火星照片、太空天气、地磁暴、太阳耀斑、地球影像). Do NOT use for terrestrial weather forecast, stock, or non-NASA data sources.
Skill 文件
| name | nasa-datasource |
|---|---|
| title | NASA 开放数据源 |
| description | Use when the user asks for NASA / space / astronomy data — astronomy picture of the day, near-earth asteroids, Mars rover photos, space weather, Earth imagery (keywords:NASA、天文、每日天文图、APOD、近地小行星、小行星、火星车、火星照片、太空天气、地磁暴、太阳耀斑、地球影像). Do NOT use for terrestrial weather forecast, stock, or non-NASA data sources. |
| tools | curl |
| credentials | NASA_API_KEY |
| credential_help | NASA_API_KEY: '在 https://api.nasa.gov/ 免费注册(填姓名+邮箱即可)获取 API Key,每小时 1000 次请求' |
NASA 开放数据源
通过 curl tool 调用 NASA Open APIs 获取天文、近地小行星、火星车照片、太空天气与地球影像等数据。
鉴权
请求 api.nasa.gov 时,在 URL query 携带 API Key:
?api_key={{secrets.NASA_API_KEY}}
占位符由后端在 curl 运行期替换为真实 key,你无需也无法看到明文。不要使用 DEMO_KEY(仅 30 次/小时、50 次/天,会很快触发限流)。
通用约定
- Base URL:
https://api.nasa.gov(必须使用 HTTPS,HTTP 会被系统拒绝) - 请求方法:GET
- 响应格式:JSON
- 日期格式:统一
YYYY-MM-DD - 分页:仅火星车照片接口分页(
page参数,每页 25 条);其余接口不分页 - 速率限制:注册 key 为 1000 次/小时,响应头返回
X-RateLimit-Remaining表示剩余额度 - 调用依赖:
- 近地小行星 Feed 的
start_date与end_date跨度最多 7 天 - 火星车照片需先确定 rover 名称(
curiosity/opportunity/spirit/perseverance)与sol(火星日)或earth_date - EPIC 地球影像需两步:先查元数据拿到
image文件名,再按规则拼出归档图片 URL
- 近地小行星 Feed 的
⚠️ 速率限制策略(必须遵守)
- 串行请求:同一时间只发 1 个 curl 请求,等返回后再发下一个。严禁并行发送多个请求
- 请求间隔:每两个请求之间至少间隔 2 秒
- 批量查询:近地小行星一次最多查 7 天;火星车照片一次只取 1 页(25 条),如需更多再翻页
- 429 重试:收到 429(
OVER_RATE_LIMIT)后等待 60 秒再重试,严禁立即重试 - 数据复用:已获取的列表/枚举类结果(如 rover 列表、APOD 内容)应缓存使用,不要重复请求
常用接口
1. 每日天文图(APOD)
GET https://api.nasa.gov/planetary/apod?api_key={{secrets.NASA_API_KEY}}参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| date | query | 否 | 指定日期 YYYY-MM-DD,默认今天(最早 1995-06-16) |
| start_date | query | 否 | 区间起始日期,与 end_date 搭配返回多天 |
| end_date | query | 否 | 区间结束日期,默认今天 |
| count | query | 否 | 随机返回 N 条,不能与 date/start_date 同用 |
| thumbs | query | 否 | true 时视频类型也返回缩略图 URL |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
| date | string | 日期 |
| title | string | 标题 |
| explanation | string | 文字说明 |
| url | string | 图片/视频 URL |
| hdurl | string | 高清图 URL(仅图片类型有) |
| media_type | string | image 或 video |
| copyright | string | 版权作者(部分图片无此字段) |
2. 近地小行星 Feed(NeoWs)
GET https://api.nasa.gov/neo/rest/v1/feed?start_date={{YYYY-MM-DD}}&end_date={{YYYY-MM-DD}}&api_key={{secrets.NASA_API_KEY}}参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| start_date | query | 否 | 起始日期,缺省为今天 |
| end_date | query | 否 | 结束日期,与起始跨度最多 7 天 |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
| element_count | number | 时间段内小行星总数 |
| near_earth_objects.{date}[].name | string | 小行星名称 |
| near_earth_objects.{date}[].estimated_diameter.kilometers.estimated_diameter_max | number | 估算最大直径(km) |
| near_earth_objects.{date}[].is_potentially_hazardous_asteroid | boolean | 是否潜在危险 |
| near_earth_objects.{date}[].close_approach_data[0].close_approach_date | string | 最近接近日期 |
| near_earth_objects.{date}[].close_approach_data[0].relative_velocity.kilometers_per_hour | string | 相对速度(km/h) |
| near_earth_objects.{date}[].close_approach_data[0].miss_distance.kilometers | string | 错过距离(km) |
3. 火星车照片(Mars Rover Photos)
GET https://api.nasa.gov/mars-photos/api/v1/rovers/{rover}/photos?sol={{sol}}&api_key={{secrets.NASA_API_KEY}}{rover} 取值:curiosity / opportunity / spirit / perseverance。
参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| sol | query | 否* | 火星日(从着陆起算,整数),与 earth_date 二选一 |
| earth_date | query | 否* | 地球日期 YYYY-MM-DD,与 sol 二选一 |
| camera | query | 否 | 相机缩写(如 FHAZ、RHAZ、MAST、NAVCAM),缺省全部 |
| page | query | 否 | 页码,每页 25 条 |
* sol 与 earth_date 至少提供其一。
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
| photos[].id | number | 照片 ID |
| photos[].img_src | string | 照片 URL |
| photos[].earth_date | string | 拍摄地球日期 |
| photos[].sol | number | 拍摄火星日 |
| photos[].camera.full_name | string | 相机全名 |
| photos[].rover.name | string | 火星车名称 |
| photos[].rover.status | string | 火星车状态 |
4. 太空天气(DONKI)
GET https://api.nasa.gov/DONKI/CME?startDate={{YYYY-MM-DD}}&endDate={{YYYY-MM-DD}}&api_key={{secrets.NASA_API_KEY}}路径段可替换为不同的太空天气事件类型:CME(日冕物质抛射)、FLR(太阳耀斑)、GST(地磁暴)、SEP、IPS、HSS。各类型参数一致,返回字段略有差异,下表以 CME/FLR/GST 通用字段为例。
参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| startDate | query | 否 | 起始日期,缺省为 30 天前 |
| endDate | query | 否 | 结束日期,缺省为今天 |
关键返回字段(返回为数组):
| JSON Path | 类型 | 说明 |
|---|---|---|
| [].activityID | string | 事件 ID |
| [].startTime | string | 事件开始时间(UTC) |
| [].sourceLocation | string | 源位置(CME/FLR) |
| [].note | string | 事件描述 |
| [].link | string | 事件详情页 URL |
| [].classType | string | 耀斑等级(仅 FLR,如 M1.5、X2.0) |
| [].gstID | string | 地磁暴 ID(仅 GST) |
5. 地球影像(EPIC)
GET https://api.nasa.gov/EPIC/api/natural?api_key={{secrets.NASA_API_KEY}}返回最新一组地球全景图元数据;按日期查询用 https://api.nasa.gov/EPIC/api/natural/date/{{YYYY-MM-DD}}?api_key={{secrets.NASA_API_KEY}}。
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
| [].identifier | string | 影像标识 |
| [].date | string | 拍摄时间 YYYY-MM-DD HH:MM:SS |
| [].caption | string | 说明 |
| [].image | string | 影像文件名(不含扩展名) |
| [].centroid_coordinates.lat | number | 影像中心纬度 |
| [].centroid_coordinates.lon | number | 影像中心经度 |
拼接图片 URL:用元数据中的 date(取年/月/日)和 image 文件名构造:
https://api.nasa.gov/EPIC/archive/natural/{YYYY}/{MM}/{DD}/png/{image}.png?api_key={{secrets.NASA_API_KEY}}调用示例
场景:用户问「今天的 NASA 每日天文图是什么?」
- 调用接口:
curl(url = "https://api.nasa.gov/planetary/apod?api_key={{secrets.NASA_API_KEY}}", X = "GET")- 从返回中提取
title、explanation、url(media_type为image时附hdurl),整理成图文回答。
场景:用户问「未来三天有哪些潜在危险的近地小行星?」
- 计算今天与三天后的日期,调用 Feed 接口:
curl(url = "https://api.nasa.gov/neo/rest/v1/feed?start_date=2026-06-16&end_date=2026-06-19&api_key={{secrets.NASA_API_KEY}}", X = "GET")- 遍历
near_earth_objects.{date}[],筛出is_potentially_hazardous_asteroid = true的项,提取name、estimated_diameter、close_approach_data[0].miss_distance.kilometers汇总。
错误处理
| HTTP 状态码 | 含义 | 应对方式 |
|---|---|---|
| 403 | API_KEY_INVALID / 缺失 key | 确认 api_key={{secrets.NASA_API_KEY}} 已正确携带 |
| 429 | OVER_RATE_LIMIT 超过速率限制 | 等待 60 秒后重试,并降低请求频率 |
| 400 | 参数错误(如日期跨度超 7 天) | 检查参数格式与取值范围(NeoWs 跨度 ≤ 7 天) |
| 404 | 资源不存在(如无效 rover) | 核对 rover 名称、日期或 sol 是否有照片 |