Most of us, probably, would get that "front row" passes just to have that first peek. We can't just wait for NASA Mars 2020 and NASA JPL site to prompt us in our newsletter subscription.
NASA APIs } have been generous and let us have that "front row" ticket for free. It is a good way for bloggers and hobbyists alike to play around with code and get that first had snippets of the images that NASA Perseverance rover captured on Mars.
Take note though in the Rover Camera list below, Perseverance is not yet available. But, don't worry, I got you covered on that one.
Abbreviation | Camera | Curiosity | Opportunity | Spirit |
---|---|---|---|---|
FHAZ | Front Hazard Avoidance Camera | ✔ | ✔ | ✔ |
RHAZ | Rear Hazard Avoidance Camera | ✔ | ✔ | ✔ |
MAST | Mast Camera | ✔ | ||
CHEMCAM | Chemistry and Camera Complex | ✔ | ||
MAHLI | Mars Hand Lens Imager | ✔ | ||
MARDI | Mars Descent Imager | ✔ | ||
NAVCAM | Navigation Camera | ✔ | ✔ | ✔ |
PANCAM | Panoramic Camera | ✔ | ✔ | |
MINITES | Miniature Thermal Emission Spectrometer (Mini-TES) | ✔ | ✔ |
Google apps script in the works
If you know JavaScript Google Apps Script will can surely help you make those postcard from Mars delivered at your will. In the NASA API's, resources for Perseverance haven't disclosed yet. But, it is not that difficult to create since we already have the base API URL's in place with the previous rovers. All we need is to be guided with the available cameras in the rover and the latest Sol it captured.
You can view the code on my github link [ NASA Perseverance Rover image resources API ]. Here's a snippets of the code in image format.
The script:
/** | |
* GLOBAL VARIABLES | |
* INSERT NECESSARY API KEYS AND EMAIL ADDRESS | |
*/ | |
var api_key = 'XXXXXXXXXX_API_KEY_XXXXXXXXXXX'; //<--- INSERT YOUR API KEY HERE | |
var api_base_url = 'https://api.nasa.gov/mars-photos/api/v1'; | |
var email_address = 'NAME@EMAIL.COM'; //<---- INSERT THE EMAIL ADDRESS YOU NEED BE INCLUDED IN THE NOTIFICATION | |
/** | |
* THIS WILL EXTRACT THE NECESSARY MANIFEST FOR THE PERSEVERANCE ROVER | |
* WE NEED TO FETCH THIS FIRST FOR US TO GET THE LATEST SOL AVAILABLE IN | |
* API IMAGE RESOURCES | |
*/ | |
function fetch_manifest(api_base_url,rover_name,api_key){ | |
var url = api_base_url.concat('/manifests/', rover_name,'?api_key=',api_key); | |
var response = UrlFetchApp.fetch(url); | |
var json = response.getContentText(); | |
var data = JSON.parse(json); | |
return data; | |
} | |
/** | |
* THIS WILL CAPTURE THE IMAGE RESOURCES | |
* PARAMETERS | |
* api_base_url | |
* rover_name = Perseverance | |
* api_key | |
* sol = the max sol capture in the fetch_manifest function | |
*/ | |
function get_sol_photos(api_base_url,rover_name,api_key,sol){ | |
var url = api_base_url.concat('/rovers/', rover_name,'/photos?sol=',sol,'&api_key=',api_key); | |
var response = UrlFetchApp.fetch(url); | |
var json = response.getContentText(); | |
var data = JSON.parse(json); | |
return data.photos; | |
} | |
/** | |
* THIS WILL EXTRACT CAPTURE THE CURRENT SOL IMAGE RESOURCES | |
*/ | |
function get_max_sol_photo(){ | |
var manifest = fetch_manifest(api_base_url,'perseverance',api_key); | |
var max_sol = manifest.photo_manifest.max_sol; | |
var photos = get_sol_photos(api_base_url,'perseverance',api_key,max_sol); | |
return {SOL:max_sol,PHOTOS:photos}; | |
} | |
/** | |
* THIS WILL CREATE THE HTML TABLE WITH THE IMAGE RESOURCE | |
* STRUCTURED ACCORDINGLY | |
*/ | |
function html_table_photos(photos){ | |
var html; | |
html = '<table style="font-family: arial, sans-serif;border-collapse: collapse;width: 70%;">'; | |
html += '<tr style="border: 1px solid #dddddd;text-align: left;padding: 8px;"><th style="border: 1px solid #dddddd;text-align: left;padding: 8px;">id</th style="border: 1px solid #dddddd;text-align: left;padding: 8px;"><th style="border: 1px solid #dddddd;text-align: left;padding: 8px;">camera</th><th style="border: 1px solid #dddddd;text-align: left;padding: 8px;">image</th></tr>'; | |
photos.map(function(row){ | |
// Logger.log(row.img_src); | |
var image_row = ''.concat('<tr><td style="border: 1px solid #dddddd;text-align: left;padding: 8px;"><a href="',row.img_src,'">',row.id,'</a></td><td style="border: 1px solid #dddddd;text-align: left;padding: 8px;">',row.camera.name,'</td><td style="border: 1px solid #dddddd;text-align: left;padding: 8px;">','<a href="',row.img_src,'"><img src="',row.img_src,'" width="100"></a></td></tr>'); | |
//var image_row = ''.concat('<tr><td>',row.id,'</td><td>',row.camera.name,'</td><td>','<img src="cid:',row.img_src,' width="50"></td></tr>'); | |
html += image_row; | |
}) | |
html += '</table>'; | |
return html; | |
} | |
/** | |
* THIS WILL SEND EMAIL NOTIFICATION OF THE FETCH | |
* CURRENT SOL IMAGE RESOURCES. | |
*/ | |
function email_photos(){ | |
var photos = get_max_sol_photo(); | |
var html = html_table_photos(photos.PHOTOS); | |
MailApp.sendEmail( | |
{ | |
to:email_address, | |
subject:'NASA Mars 2020 Perseverance Rover On Mars photos | Sol '.concat(photos.SOL), | |
htmlBody:html | |
} | |
); | |
} |
No comments:
Post a Comment