;+ ; :description: ; function to download ASPIICS data (fits files) ; ; :params: ; t1 : in, required, string, start time in '2025-07-16T17:14:00' format ; t2 : in, required, string, end time in '2025-07-16T17:18:00' format ; data_path : in, required, string, directory where to put fits files ; ; :keywords: ; level : in, optional, string, level of the fits files: 'L1', 'L2', 'L3'; default: 'L3' ; filter : in, optional, string, filter, e.g. 'Wideband', 'Fe*' (if not specified, all filters will be retrieved) ; ; :returns: ; array of fits file names ; ; :examples: ; array_of_filenames = p3_get_aspiics_data('2025-07-16T17:14:00', '2025-07-16T18:14:00', 'C:\Users\stesl\ASPIICS\data', level='L3', filter='Wideband' ) ; array_of_filenames = p3_get_aspiics_data('2025-07-16T17:14:00', '2025-07-16T18:14:00', 'C:\Users\stesl\ASPIICS\data') ; ; :modification history: ; 22-Mar-2026 - Marek Steslicki (CBK Wro), initial release ; ;- function p3_get_aspiics_data, t1, t2, data_path, level=level, filter=filter baseAPI = "https://p3sc.oma.be/api/" ; baseAPI url fitsfileUrl = 'https://p3sc.oma.be/datarepfiles/' if not keyword_set(level) then level = "L3" ; Level of the data version = 'v2' fixed_selector = "active=is.true&version=eq." + version fitsfileUrl += '/' + level + '/' + version + '/' query = level + '?select=name' query += '&' + fixed_selector if keyword_set(filter) then query += '&' + 'FILTER=like.' + filter query += '&' + 'DATE-OBS=gte.' + t1 query += '&' + 'DATE-OBS=lte.' + t2 url = baseAPI + query ; response_data = httprequest.get(url) ; json_data = response_data.text oUrl = OBJ_NEW('IDLnetURL') json_data = oUrl->Get(URL=url, /STRING_ARRAY) obj_destroy, oUrl if not (n_elements(json_data)) then begin message, 'no data' return, 0 endif filelist = json_parse(json_data) files = list() n = n_elements(filelist) i = 1L foreach f, filelist do begin files.add, f['name'] url_scheme = (strsplit(url, ':',/extract))[0] url_hostname = strjoin((strsplit(fitsfileUrl + f['name'],'/',/extract))[1:*],'/') ourl = obj_new('idlneturl', url_scheme = url_scheme, url_hostname = url_hostname) retrievedfilepath = ourl->get(filename=data_path + path_sep() + f['name']) ourl->getproperty, response_code=respcode ; 200 = ok ourl->closeconnections obj_destroy, ourl info = strtrim(string(i++),2) + '/' + strtrim(string(n),2) + ' ' + f['name'] if (respcode eq 200) then message, info + ' - ok', /inf else message, info + ' - error', /inf ; only in IDL 9.2: response_fits = HttpRequest.get(fitsfileUrl + f['name'], FILENAME = data_path + path_sep() + f['name']) endforeach return, files.toarray() end