Simple NASA API Client
Project description
Prepare environment
mkdir nasa-client
cd nasa-client
uv init --package nasa-client-pro --python=3.14
uv venv
source .venv/bin/activate
touch main.py
Create .env file
touch .env .gitignore
# Add your NASA_API_KEY API key to the .env file
echo "NASA_API_KEY=your_api_key_here" >> .env
cd src/nasa_client_pro
touch client.py
Add packages
- https://github.com/Delgan/loguru.git
- https://github.com/psf/black.git
- https://github.com/theskumar/python-dotenv.git
uv add requests python-dotenv loguru black
from .client import NASAClient
- makes it easy to
import - . means from the current package
- go inside client.py and import NASAClient
- without it, users would have to write
from nasa_client_pro.client import NASAClient
- with it, users can simply write
from nasa_client_pro import NASAClient
__all__=[NASAClient]
- this controls what gets exported publicly from your package
- think of it like a
public API whitelist - if someone does
from nasa_client_pro import *(cleaner, more user-friendly API)- only things listed in
__all__will be imported
- only things listed in
Bonus: what happens without __all__?
Format code
black main.py
black src/nasa_client_pro/*.py
Git
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/<USERNAME>/nasa-client-pro.git
git push -u origin main
Run Locally
uv run main.py
Build Package
uv add build twine
Build and Publish to PyPI
# build project
uv build
# publish project
export UV_PUBLISH_USERNAME="__token__"
export UV_PUBLISH_PASSWORD="pypi-AgEIcHlwaS5vcmcCJ..."
uv publish
# another
export PYPI_TOKEN="pypi-AgEIcHlwaS5vcmcCJ..."
uv publish --username __token__ --password $PYPI_TOKEN
# another
uv publish --username __token__ --password "pypi-AgEIcHlwaS5vcmcCJ..."
# using twine: https://twine.readthedocs.io/en/stable/
export TWINE_USERNAME=__token__
export TWINE_PASSWORD="pypi-AgEIcHlwaS5vcmcCJ..."
twine upload dist/*
twine upload dist/* --verbose --username __token__ --password "pypi-AgEIcHlwaS5vcmcCJ..."
# debug trick
uv publish https://test.pypi.org/legacy/ --username __token__ --password $PYPI_TOKEN
Install Wheel Files
pip install dist/nasa_client_pro-0.6.0-py3-none-any.whl
uv tool install dist/nasa_client_pro-0.6.0-py3-none-any.whl
USAGE
pip install nasa-client-prooruv add nasa-client-pro --upgrade- export NASA_API_KEY=tYYvy2MZehnbOAY5t...
import os
from nasa_client_pro import NASAClient
from dotenv import load_dotenv
from loguru import logger
# load_dotenv(".env", override=True)
NASA_API_KEY = os.getenv("NASA_API_KEY")
def main():
# --- Usage (Clean and simple) ---
nasa = NASAClient(api_key=NASA_API_KEY)
# 1. Get the cool space photo of the day
logger.info("Fetching APOD...")
pods = nasa.get_apod(start_date="2026-04-01", end_date="2026-04-06")
# print(pod)
for pod in pods:
print(f"Today's Title: {pod['title']}")
print(f"Today's URL: {pod['url']}")
print(f"Today's Explanation: {pod['explanation']}")
print(f"Date: {pod['date']}")
print("-"*100)
print("-" * 100)
# 2. Check for "Space Rocks" near us
logger.info("Searching for asteroids...")
asteroids = nasa.search_asteroids("2026-04-01", "2026-04-06")
print(f"Found: {asteroids['element_count']} asteroids this week!")
if __name__ == "__main__":
main()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
nasa_client_pro-0.7.0.tar.gz
(2.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nasa_client_pro-0.7.0.tar.gz.
File metadata
- Download URL: nasa_client_pro-0.7.0.tar.gz
- Upload date:
- Size: 2.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52ed7edc28a83d29484f84e76029aff0a3a114fe8cd5d06100f5434ab38a65b6
|
|
| MD5 |
504cd51144a13eaf1f3e2ff056f3b404
|
|
| BLAKE2b-256 |
8225fce540ecc1c1cff507a566eedbcc43604ac2e19441c18316913a353c31ce
|
File details
Details for the file nasa_client_pro-0.7.0-py3-none-any.whl.
File metadata
- Download URL: nasa_client_pro-0.7.0-py3-none-any.whl
- Upload date:
- Size: 3.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4029d98dd17241ada1c49bc676fb320e30ba8fbd5483792162f6b38118d2b457
|
|
| MD5 |
e1c52a54ac826f61432396b24fef9cbc
|
|
| BLAKE2b-256 |
fd03dcb069ef80fbfe3ac6774e0ac51f1a309aa6b72ab0bfabf34c97f5baadd3
|