Example of python script to download on your local machine a VIIRS L2 CLDPROP netcdf granule file from ladsweb using python.
Lets consider the following data for example:
year = 2018month = 2day = 15hour = 14minute = 36
Note: VIIRS granules are every 6 minutes
Convert day to count of days
First step we need to get the count of days:
from datetime import dated0 = date(year, 1, 1)d1 = date(year, month, day)delta = d1 - d0count_of_days = delta.days + 1
Check existing files for the given date
To download a VIIRS granule file, it is necessary to get its full name. However the name of a VIIRS granule contains the date where the file has been created, which is impossible to know in advance. So, to get the names of VIIRS granule for a given day, LAADS DAAC provide a json file that can be accessed using urlopen and read using json.loads:
ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5110/CLDPROP_L2_VIIRS_SNPP/{:04d}/{:03d}.json'.format(year,count_of_days)with urllib.request.urlopen(ladsweb_url) as url:data = json.loads(url.read().decode())pp = pprint.PrettyPrinter(indent=4)pp.pprint(data)
returns:
[ { 'last-modified': '2019-03-10 19:33','name': 'CLDPROP_L2_VIIRS_SNPP.A2018046.0000.001.2019068073503.nc','size': 113431810},{ 'last-modified': '2019-03-10 19:33','name': 'CLDPROP_L2_VIIRS_SNPP.A2018046.0006.001.2019068073504.nc','size': 112769587},{ 'last-modified': '2019-03-10 19:33','name': 'CLDPROP_L2_VIIRS_SNPP.A2018046.0012.001.2019068073506.nc','size': 120314867},{ 'last-modified': '2019-03-10 19:59','name': 'CLDPROP_L2_VIIRS_SNPP.A2018046.0018.001.2019068073539.nc','size': 155122070},...
Now we can check if our file exists:
name_list = [data[i]['name'] for i in range(len(data))]valid_name_list = [name for name in name_list if '{:04d}{:03d}.{:02d}{:02d}'.format(year,count_of_days,hour,minute) in name]
Download the file
Finally, the file can be downloaded using the python function urlretrieve:
if len(valid_name_list) == 1:ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5110/CLDPROP_L2_VIIRS_SNPP/{:04d}/{:03d}/'.format(year,count_of_days)urllib.request.urlretrieve(ladsweb_url+valid_name_list[0], path_to_files + valid_name_list[0])
Python script
from datetime import dateimport urllib.requestimport urllib.request, jsonimport pprintyear = 2018month = 2day = 15hour = 14minute = 36path_to_files = ''#----------------------------------------------------------------------------------------## Convert day to count of days:d0 = date(year, 1, 1)d1 = date(year, month, day)delta = d1 - d0count_of_days = delta.days + 1#----------------------------------------------------------------------------------------## Check existing files for the given date:ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5110/CLDPROP_L2_VIIRS_SNPP/{:04d}/{:03d}.json'.format(year,count_of_days)with urllib.request.urlopen(ladsweb_url) as url:data = json.loads(url.read().decode())pp = pprint.PrettyPrinter(indent=4)pp.pprint(data)#----------------------------------------------------------------------------------------## Download the file:name_list = [data[i]['name'] for i in range(len(data))]valid_name_list = [name for name in name_list if '{:04d}{:03d}.{:02d}{:02d}'.format(year,count_of_days,hour,minute) in name]if len(valid_name_list) == 1:ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5110/CLDPROP_L2_VIIRS_SNPP/{:04d}/{:03d}/'.format(year,count_of_days)urllib.request.urlretrieve(ladsweb_url+valid_name_list[0], path_to_files + valid_name_list[0])
References
| Link | WebSite |
|---|---|
| NASA LAADS DAAC | ladsweb.modaps.eosdis.nasa.gov |
| datetime — Basic date and time types | docs.python.org |
| urlopen | docs.python.org |
| Reading and Writing JSON to a File in Python | docs.python.org |
| urllib.request — Extensible library for opening URLs | docs.python.org |
