index.js 1.2 KB

12345678910111213141516171819202122232425262728
  1. // node --require regenerator-runtime/runtime --require ./babel-local --require isomorphic-fetch index.js
  2. import {createWriteStream} from 'fs';
  3. async function work () {
  4. 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';
  5. const datasetsRaw = await fetch(rootUri);
  6. const {result: {count, results}} = await datasetsRaw.json();
  7. console.info(`Datasets: ${count}`);
  8. for (let {title, num_resources, resources} of results) {
  9. console.info(`Fetching: ${title}, ${num_resources} files`);
  10. const saves = [];
  11. for (let {name, description, url} of resources) {
  12. const [, issue, year] = name.match(/(\d+)\/(\d+)/);
  13. console.info(`File ${year} / ${issue}: ${description}`);
  14. const xmlRaw = await fetch(url);
  15. saves.push(new Promise((resolve, reject) =>
  16. xmlRaw.body.pipe(createWriteStream(`${year}.${issue}.xml`))
  17. .on('close', resolve)
  18. .on('error', reject)
  19. ));
  20. }
  21. await Promise.all(saves);
  22. }
  23. return results;
  24. }
  25. work().catch(error => console.error(error));