123456789101112131415161718192021222324252627282930313233343536 |
- // 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));
|