// node --require regenerator-runtime/runtime --require ./babel-local --require isomorphic-fetch index.js ..\out import {createWriteStream, promises} from 'fs'; import {resolve} from 'path'; const {access, rename} = promises; async function work (prefix) { console.info(`Output directory: ${prefix}`); let rootUri = 'https://data.gov.sk/api/3/action/package_search?fq=%2btitle:Vestn%C3%ADk%20verejn%C3%A9ho%20obstar%C3%A1vania*&rows=9999&sort=metadata_created_date%20asc'; const datasetsRaw = await fetch(rootUri); const {result: {count, results}} = await datasetsRaw.json(); console.info(`Datasets: ${count}`); for (let {title, num_resources, resources} of results) { console.info(`Fetching: ${title}, ${num_resources} files`); const saves = []; for (let {name, description, url} of resources) { const [, issue, year] = name.match(/(\d+)\/(\d+)/); const target = `${prefix}/${year}.${issue}.xml`; if (await access(target).then(() => true, () => false)) continue; console.info(`File ${year} / ${issue}: ${description}`); const xmlRaw = await fetch(url); saves.push((async () => { const temporary = `${prefix}/${year}.${issue}.xml.download`; await xmlRaw.body.pipe(createWriteStream(temporary)); await rename(temporary, target); })()); } await Promise.all(saves); } return results; } work(resolve(process.argv[2] || '')) .catch(error => console.error(error));