Carrying on with playing with the open API data available from NASA I got to looking at the data available from the Curiosity rover that is currently on Mars. This project was a little different for me for two reasons;
I wanted to include a IF command that checked the date the user entered was after 6th ‘August 2012 as this was when Curiosity landed on Mars.
and
I wanted the program to display an image from one of Curiosity’s camera. I could not find a way in Python to collect image and live feed it. So instead I kind of cheated and got it to download the image to a folder called “nasa_cur” and then display the image.
#!/bin/python3
#geektechstuff
#NASA Curiosity Photo Viewer
#Made possible thanks to NASA’s open APIs
import json, requests, os
from PIL import Image
#create directory to save img file to
os.makedirs(‘nasa_cur’, exist_ok=True)
#Variables
api_key=’demo_key’
#API keys avaiable from api.nasa.gov
dd=”
mm=”
yyyy=”
earth_date=”
#Earth date in YYYY-MM-DD format
url=”
#blank to start
image=”
#blank to start
print(“Hi and welcome to GeekTechStuff’s NASA Curiosity Photo Viewer”)
print(“”)
print(“Curiosity is a NASA rover on the planet Mars.”)
print(“Curiosity landed on Mars on 6th August 2012”)
print(“”)
print(“Please use dates in the format of YYYY-MM-DD”)
print(“”)
print(“”)
print(“Let’s pick a date range after 2012-08-06 to view images from”)
#Takes date input from the user
dd=input(‘Pick a date (DD):’)
mm=input(‘Pick a month (MM):’)
yyyy=input(‘Pick a year (YYYY):’)
earth_date=yyyy+’-‘+mm+’-‘+dd
earth_date=str(earth_date)
#print(earth_date)
earth_date2=yyyy+mm+dd
earth_Date2=int(earth_date2)
#Checks the date is after 6th August 2012
if earth_date2 < ‘20120806’:
print(‘You did not choose a date after 2012-08-06’)
else:
#Gets the JSON file
#print(url)
response=requests.get(url)
response.raise_for_status()
rover_data=json.loads(response.text)
#print(rover_data)
rover_data2=rover_data[“photos”]
#Prints the day number on Mars
sol=rover_data2[0]
sol=sol[‘sol’]
print(‘This photo was taken on sol’,sol,’of the Curiosity mission’)
#display the image
img_src=rover_data2[0]
img_src=img_src[‘img_src’]
#print(img_src)
res=requests.get(img_src)
res.raise_for_status()
imageFile = open(os.path.join(‘nasa_cur’, os.path.basename(img_src)),’wb’)
for part in res.iter_content(100000):
imageFile.write(part)
imageFile.close()
Image.open(os.path.join(‘nasa_cur’, os.path.basename(img_src))).show()