NASA API 教學 |使用 Python 探索宇宙。以獲得每日的太空照片為範例。

Molly Chi
10 min readFeb 3, 2023

--

2023/02/03 NASA API

✨ 目錄

- NASA API
- 文件和資源
- API 的註冊和使用
- API 的查詢方式(包含回傳資料說明)
- Python 程式實作
- Node.js 程式實作
- API 限制
- 結論

✨ NASA API

NASA API(National Aeronautics and Space Administration API)是 NASA 提供的一系列公開 API,可以讓開發人員存取 NASA 的太空資料、太空技術、太空旅行、地球觀測、空間科學、航空技術數據和資訊。這個 API 涵蓋了 NASA 的多項計畫,如月球計畫,太空探測和航天器,以及其他關於太空和宇宙的數據。

這些 API 都是以 RESTful API 形式提供,因此可以很容易地在任何程式語言 中使用它們,如 Java、Python、Node.js 和 Ruby。

NASA API 的功能包括提供圖片,影片,音頻,文字數據和其他太空數據,並且可以被用於製作應用程式,網站,教育工具,以及其他科學研究。使用者可以通過這個 API 檢索關於太空,航空和宇宙的信息,並且對其進行探究和分析。

其中又以 APOD 最多人使用,可以得到每日太空的照片,也是本篇會實作的範例。

✨文件和資源

NASA API 的官方文件:https://api.nasa.gov/

NASA GitHub:https://github.com/nasa/api-docs

✨API 的註冊和使用

NASA API 的使用需要先註冊一個 API Key

STEP 1:進入 NASA API 的官網 https://api.nasa.gov/

STEP 2:點擊「Generate API Key」按鈕,前往 API Key 申請頁面。

STEP 3:填寫資訊,並同意 API 的使用條款,輸入完成後就可以看到以下畫面,有 API Key 及很貼心的提供了 URL 範例!

✨API 的查詢方式

得到 API Key 後,可以來測試是否能正常使用,直接將以下網址貼在搜尋欄(記得將 YOUR_API_KEY改成自己的 Key)

  • 獲取每日的太空照片:
    https://api.nasa.gov/planetary/apod?api_key=YOUR_API_KEY

每日太空照片的回傳資料如下:

{
copyright: "Daniel Stern",
date: "2023-02-02",
explanation: "The 1970s are are sometimes ignored by astronomers. For example, this beautiful grouping of reflection nebulae in Orion - NGC 1977, NGC 1975, and NGC 1973 - is usually overlooked in favor of the substantial glow from the nearby stellar nursery better known as the Orion Nebula. Found along Orion's sword just north of the bright Orion Nebula complex, these reflection nebulae are also associated with Orion's giant molecular cloud about 1,500 light-years away, but are dominated by the characteristic blue color of interstellar dust reflecting light from hot young stars. In this sharp color image a portion of the Orion Nebula appears along the bottom border with the cluster of reflection nebulae at picture center. NGC 1977 stretches across the field just below center, separated from NGC 1973 (above right) and NGC 1975 (above left) by dark regions laced with faint red emission from hydrogen atoms. Taken together, the dark regions suggest the popular moniker, the Running Man Nebula. At the estimated distance of Orion's dusty molecular cloud this running man would be about 15 light-years across.",
hdurl: "https://apod.nasa.gov/apod/image/2302/NGC1975RunningMan.jpg",
media_type: "image",
service_version: "v1",
title: "Reflections on the 1970s",
url: "https://apod.nasa.gov/apod/image/2302/NGC1975RunningMan_1024.jpg"
}

API 的回應格式為 JSON,表示的內容如下:

copyright: 圖片的版權
date: 圖片的日期
explanation: 說明這個圖片的內容
hdurl: 這個圖片的高清圖片網址
media_type: 表示這個回應的媒體類型
service_version: API 的版本
title: 表示這個圖片的標題
url: 表示這個圖片的圖片網址
  • Asteroids — NeoWs(Near Earth Object),靠近地球的物件,包括小行星和彗星

舉例其中一個 — 根據最接近地球的日期檢索小行星列表

https://api.nasa.gov/neo/rest/v1/feed?start_date=START_DATE&end_date=END_DATE&api_key=API_KEY

需要給定的參數有 start_date、end_date、api_key,像是官網提供的例子,回傳內容會包含:

element_count:在指定的日期區間內的 NEO 的數量。
near_earth_objects:是一個包含每個 NEO 資訊的物件,其中每個物件的鍵是某天的日期,值是一個陣列,包含當天所有 NEO 的資訊。
links:額外的連結資訊。

每個 NEO 物件的內容包括:
id:NEO 的唯一識別碼。
name:NEO 的名稱。
nasa_jpl_url:NASA Jet Propulsion Laboratory 的 NEO 資訊網頁的網址。
absolute_magnitude_h:NEO 的絕對亮度,是一個以 H 值表示的指標,用來描述天體物體的亮度。
estimated_diameter:NEO 的估計直徑,以公里和英里為單位。
is_potentially_hazardous_asteroid:如果 NEO 具有潛在危險,則為 True,否則為 False。

其他還有像是

真的還有超級多關於地球、宇宙及太空的資料,對天文有興趣的開發者都應該來玩玩看😎😎😎。

✨ API 限制 🥸🥸🥸

  • 使用自己的 API key ,每小時限制:每小時 1,000 個請求
  • 使用 NASA 提供的 Demo Key,每個 IP 地址每小時 30 個請求;每天每個 IP 地址 50 個請求
  • 可以通過檢查每個 API 返回的 X-RateLimit-Limit 和 X-RateLimit-Remaining HTTP 標頭來檢查當前的速率限制和使用詳細訊息。

✨Python 程式實作

STEP 1:安裝 requests 套件 pip install requests

STEP 2:程式


import requests

# API 密鑰
api_key = "YOUR_API_KEY"

# API 網址
url = "https://api.nasa.gov/planetary/apod"

# API 參數
params = {
"api_key": api_key
}

# 發送 API 請求
response = requests.get(url, params=params)

# 取得 API 的返回值
data = response.json()

# 顯示照片的網址
print("Picture URL:", data["url"])

STEP 3:Run code py app.py

成功🎉🎉🎉

✨ Node.js 程式實作

const request = require('request')

const options = {
method: 'GET',
url: 'https://api.nasa.gov/planetary/apod',
qs: {
api_key: 'YOUR_API_KEY',
},
}

request(options, function (error, response, body) {
if (error) throw new Error(error)
var data = JSON.parse(body)
console.log(data)
})

一樣成功獲得資料

✨結論

NASA API 可以做很多有趣的應用,像是建立一個每天更新的太空背景 App、衛星和太空船追蹤應用、宇宙事件的追蹤應用、太空教育應用、資料視覺化應用等。

最近玩這些特別的 API 覺得還滿有趣的,只是有點可惜都沒有想再深入做出上述的應用(完ㄌ484對寫扣失去興趣ㄌ呢q.q),希望下一篇文章不要拖太久。(๑´ڡ`๑)

--

--

Molly Chi
Molly Chi

Written by Molly Chi

Molly — Software Developer / 職稱是軟體研發工程師。 什麼都寫,專精於前端及APP (ง•̀_•́)ง ! ❤ 合作發案討論疑難雜症請洽: momolly1024@gmail.com

No responses yet