How to download MODIS L2 Active Fire Products (MYD14, MOD14) using python ?

Author: Benjamin Marchant
License: CC BY 4.0

In [8]:
from datetime import date
from os import path
from calendar import monthrange

import urllib.request
import urllib.request, json 
import pprint
import os

import glob
import netCDF4
import random
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import numpy.ma as ma
In [9]:
output_dir = '/Volumes/HD2/Datasets/Research/NASA'

To download a file from NASA LAADS DAAC, you need to create a token. Here are the steps to follow:

  1. Visit this website: https://ladsweb.modaps.eosdis.nasa.gov/

  2. Create a free account.

  3. From the drop-down profile menu located in the top right corner, select "Generate Token."

  4. Copy your generated token.

Please replace "the token below" with your own token. As an example, I have put in my own token.

In [10]:
token = 'Ym1hcmNoYW50OlltVnVhbUZ0YVc0dWJXRnlZMmhoYm5SQWJtRnpZUzVuYjNZPToxNjI0NzE3MjEwOjEwZmNhNWU4ODVlNzc3OGUyMzE3NzFkZjNmNjUwMGIzNjVhMDY4ZWY'
In [11]:
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'Bearer {}'.format(token))]
urllib.request.install_opener(opener)
In [12]:
year = 2019
month = 8
day = 1
In [13]:
platform = 'AQUA'
instrument = 'MODIS'
product_category = 61
product = 'MYD14'
In [14]:
d0 = date(year, 1, 1)
d1 = date(year, month, day)
delta = d1 - d0
In [15]:
count_of_day = delta.days + 1
In [16]:
ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}.json'.format(product_category,product,year,count_of_day)

print(ladsweb_url)
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213.json
In [17]:
with urllib.request.urlopen(ladsweb_url) as url:
    data = json.loads(url.read().decode())

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(data['content'][:10])
[   {   'archiveSets': 61,
        'cksum': '2010873135',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0000.061.2020302175709.hdf',
        'fileId': 5691908350,
        'md5sum': '53577405052e2d994ec39f1ac2ff5ea5',
        'mtime': 1603922843,
        'name': 'MYD14.A2019213.0000.061.2020302175709.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0000.061.2020302175709.hdf',
        'size': 189172},
    {   'archiveSets': 61,
        'cksum': '1327693777',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0005.061.2020302175824.hdf',
        'fileId': 5691918818,
        'md5sum': '73ac6136ef014040ed576f0d7ca776ec',
        'mtime': 1603922962,
        'name': 'MYD14.A2019213.0005.061.2020302175824.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0005.061.2020302175824.hdf',
        'size': 335999},
    {   'archiveSets': 61,
        'cksum': '2278586037',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0010.061.2020302181114.hdf',
        'fileId': 5691970431,
        'md5sum': 'a2a19169dc85b15f6e2a2108aafcc6f5',
        'mtime': 1603923743,
        'name': 'MYD14.A2019213.0010.061.2020302181114.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0010.061.2020302181114.hdf',
        'size': 214087},
    {   'archiveSets': 61,
        'cksum': '246883333',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0015.061.2020302181424.hdf',
        'fileId': 5691984802,
        'md5sum': '5dea90738cd175f841f7d290a07cf21e',
        'mtime': 1603923982,
        'name': 'MYD14.A2019213.0015.061.2020302181424.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0015.061.2020302181424.hdf',
        'size': 256004},
    {   'archiveSets': 61,
        'cksum': '3579558030',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0020.061.2020302180401.hdf',
        'fileId': 5691947019,
        'md5sum': '2b149d00739b8b88196110fc9fdc6cb8',
        'mtime': 1603923383,
        'name': 'MYD14.A2019213.0020.061.2020302180401.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0020.061.2020302180401.hdf',
        'size': 265628},
    {   'archiveSets': 61,
        'cksum': '1332784572',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0025.061.2020302180329.hdf',
        'fileId': 5691939641,
        'md5sum': 'd669c8bfc8eff9418c972521fab3ee87',
        'mtime': 1603923293,
        'name': 'MYD14.A2019213.0025.061.2020302180329.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0025.061.2020302180329.hdf',
        'size': 252921},
    {   'archiveSets': 61,
        'cksum': '2348148095',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0030.061.2020302180305.hdf',
        'fileId': 5691937226,
        'md5sum': '6955dbeabec385131fb15a954dda5051',
        'mtime': 1603923262,
        'name': 'MYD14.A2019213.0030.061.2020302180305.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0030.061.2020302180305.hdf',
        'size': 236681},
    {   'archiveSets': 61,
        'cksum': '412948903',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0035.061.2020302180334.hdf',
        'fileId': 5691946198,
        'md5sum': '4afa9087258cab4244665eac4f5f2818',
        'mtime': 1603923383,
        'name': 'MYD14.A2019213.0035.061.2020302180334.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0035.061.2020302180334.hdf',
        'size': 285021},
    {   'archiveSets': 61,
        'cksum': '1797569942',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0040.061.2020302181122.hdf',
        'fileId': 5691964864,
        'md5sum': '54ab20313ddfb9e3372eb447920ef06f',
        'mtime': 1603923624,
        'name': 'MYD14.A2019213.0040.061.2020302181122.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0040.061.2020302181122.hdf',
        'size': 266239},
    {   'archiveSets': 61,
        'cksum': '1888297739',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0045.061.2020302181044.hdf',
        'fileId': 5691967347,
        'md5sum': '75deb845d1acfd3fc608ab644d17dad0',
        'mtime': 1603923712,
        'name': 'MYD14.A2019213.0045.061.2020302181044.hdf',
        'products': 'MYD14',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD14/2019/213/MYD14.A2019213.0045.061.2020302181044.hdf',
        'size': 284648}]
In [12]:
os.system( 'mkdir {}/{}'.format(output_dir,platform) )
os.system( 'mkdir {}/{}/{}'.format(output_dir,platform,instrument) )
os.system( 'mkdir {}/{}/{}/{}'.format(output_dir,platform,instrument,product))
os.system( 'mkdir {}/{}/{}/{}/{:04d}'.format(output_dir,platform,instrument,product,year) )
os.system( 'mkdir {}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}'.format(output_dir,platform,instrument,product,year,year,month,day) )
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS: File exists
Out[12]:
0
In [14]:
%%time

log_error = []

for file in data['content']:
    file_name = file['name']
    #print(file_name) 
    target_dir = '{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/{}'.format(output_dir,platform,instrument,product,year,year,month,day,file_name)
    if not path.exists( target_dir ):
        try:
            ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}/{}'.format(product_category,product,year,count_of_day,file_name)
            urllib.request.urlretrieve(ladsweb_url,target_dir) 
        except:
            log_error.append(file)
            print('error')
CPU times: user 7.37 s, sys: 1.63 s, total: 9.01 s
Wall time: 3min 43s
In [15]:
file_list = glob.glob('{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/*.hdf'.format(output_dir,platform,instrument,product,year,year,month,day))

len(file_list)
Out[15]:
288
In [21]:
tot_size = 0

for file in file_list:
    file_size = os.path.getsize(file) * 0.001 # in KB
    tot_size += file_size
    print( str( round(file_size,2)  ) + ' KB')
189.17 KB
336.0 KB
214.09 KB
256.0 KB
265.63 KB
252.92 KB
236.68 KB
285.02 KB
266.24 KB
284.65 KB
503.08 KB
502.55 KB
609.51 KB
461.34 KB
228.56 KB
246.21 KB
178.26 KB
126.72 KB
199.34 KB
213.83 KB
223.14 KB
338.86 KB
196.1 KB
324.76 KB
377.19 KB
318.4 KB
286.39 KB
318.22 KB
252.03 KB
405.36 KB
597.17 KB
463.43 KB
471.33 KB
301.03 KB
177.47 KB
233.72 KB
119.79 KB
160.44 KB
220.6 KB
217.75 KB
284.19 KB
297.97 KB
270.0 KB
424.68 KB
400.6 KB
338.65 KB
293.53 KB
329.34 KB
421.26 KB
545.74 KB
550.18 KB
419.71 KB
296.52 KB
183.09 KB
147.41 KB
224.34 KB
280.98 KB
328.34 KB
343.67 KB
251.52 KB
328.86 KB
233.47 KB
269.09 KB
370.26 KB
217.24 KB
362.85 KB
325.01 KB
523.33 KB
426.21 KB
664.49 KB
415.79 KB
470.83 KB
577.06 KB
270.33 KB
211.55 KB
400.21 KB
258.09 KB
212.05 KB
321.11 KB
277.39 KB
327.25 KB
212.2 KB
253.21 KB
225.47 KB
212.81 KB
350.06 KB
444.81 KB
515.41 KB
493.45 KB
627.61 KB
476.22 KB
639.9 KB
910.41 KB
424.79 KB
257.57 KB
141.49 KB
120.74 KB
184.73 KB
302.45 KB
222.73 KB
312.87 KB
207.72 KB
280.16 KB
356.29 KB
320.9 KB
259.2 KB
411.92 KB
496.2 KB
531.41 KB
500.06 KB
516.95 KB
1013.25 KB
605.04 KB
260.29 KB
233.05 KB
128.79 KB
152.24 KB
276.18 KB
203.03 KB
231.43 KB
290.44 KB
219.3 KB
330.37 KB
281.66 KB
338.2 KB
388.08 KB
542.55 KB
485.89 KB
654.66 KB
422.47 KB
612.74 KB
816.93 KB
272.9 KB
141.85 KB
163.04 KB
122.03 KB
166.85 KB
212.72 KB
196.52 KB
287.93 KB
274.21 KB
252.07 KB
365.5 KB
359.89 KB
869.51 KB
388.06 KB
347.42 KB
511.24 KB
512.12 KB
523.64 KB
545.65 KB
452.96 KB
163.02 KB
147.94 KB
196.44 KB
178.19 KB
200.41 KB
258.86 KB
236.27 KB
330.57 KB
222.38 KB
208.99 KB
295.53 KB
340.58 KB
269.84 KB
429.46 KB
354.5 KB
325.49 KB
386.91 KB
528.49 KB
437.67 KB
288.98 KB
223.41 KB
248.44 KB
256.74 KB
210.75 KB
219.02 KB
266.92 KB
216.11 KB
328.83 KB
194.14 KB
263.24 KB
278.15 KB
263.79 KB
249.71 KB
279.73 KB
273.81 KB
337.67 KB
545.9 KB
437.98 KB
492.0 KB
275.71 KB
167.64 KB
227.47 KB
327.62 KB
190.45 KB
195.97 KB
264.8 KB
237.45 KB
318.38 KB
179.72 KB
299.56 KB
271.51 KB
461.92 KB
454.73 KB
355.16 KB
417.83 KB
787.19 KB
681.82 KB
381.77 KB
549.9 KB
366.56 KB
363.27 KB
290.15 KB
250.14 KB
199.11 KB
224.56 KB
210.81 KB
279.03 KB
288.73 KB
276.08 KB
477.75 KB
353.22 KB
475.73 KB
427.86 KB
497.65 KB
770.84 KB
1066.37 KB
522.14 KB
533.02 KB
412.37 KB
287.9 KB
379.09 KB
271.27 KB
123.82 KB
139.42 KB
269.52 KB
215.73 KB
324.21 KB
272.62 KB
377.37 KB
256.42 KB
368.67 KB
339.51 KB
335.93 KB
578.18 KB
618.33 KB
893.57 KB
370.93 KB
623.35 KB
483.52 KB
312.35 KB
326.63 KB
163.0 KB
136.51 KB
144.67 KB
286.88 KB
201.72 KB
324.54 KB
277.09 KB
347.56 KB
351.17 KB
261.94 KB
256.22 KB
322.55 KB
325.43 KB
436.89 KB
530.18 KB
456.63 KB
655.95 KB
421.64 KB
243.46 KB
254.57 KB
227.83 KB
251.62 KB
171.39 KB
187.11 KB
201.24 KB
335.2 KB
259.2 KB
312.0 KB
276.24 KB
280.65 KB
250.41 KB
307.45 KB
301.15 KB
389.91 KB
472.01 KB
In [22]:
tot_size
Out[22]:
98124.77599999995
In [ ]:
 
In [ ]:
 
In [25]:
365 * 4 * 20 / ( 60 * 24 )
Out[25]:
20.27777777777778
In [ ]:
 
In [18]:
%%time

year = 2019
month = 8

platform = 'AQUA'
instrument = 'MODIS'
product_category = 61
product = 'MYD14'

log_error = []

for day in range(1, monthrange(year, month)[1]+1):
    
    d0 = date(year, 1, 1)
    d1 = date(year, month, day)
    delta = d1 - d0

    count_of_day = delta.days + 1

    ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}.json'.format(product_category,product,year,count_of_day)

    with urllib.request.urlopen(ladsweb_url) as url:
        data = json.loads(url.read().decode())

    os.system( 'mkdir {}/{}/{}/{}/{:04d}'.format(output_dir,platform,instrument,product,year) )
    os.system( 'mkdir {}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}'.format(output_dir,platform,instrument,product,year,year,month,day) )
    
    for file in data['content']:
        file_name = file['name']
        #print(file_name) 
        target_dir = '{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/{}'.format(output_dir,platform,instrument,product,year,year,month,day,file_name)
        if not path.exists( target_dir ):
            try:
                ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}/{}'.format(product_category,product,year,count_of_day,file_name)
                urllib.request.urlretrieve(ladsweb_url,target_dir) 
            except:
                log_error.append(file)
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019/2019_08_01: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD14/2019: File exists
CPU times: user 3min 53s, sys: 53.5 s, total: 4min 47s
Wall time: 1h 42min 38s
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]: