Jak stahovat a rozbalovat soubory gz v Node.js

Možná víte, že mám na Twitteru robota s názvem @randomMDN. Každých několik hodin robot načte mapu webu MDN a tweetuje náhodnou stránku.

Dva roky jezdil bez problému, ale nedávno se rozbil. Důvodem bylo, že MDN změnilo mapu webu z https://developer.mozilla.org/sitemaps/en-US/sitemap.xml do https://developer.mozilla.org/sitemaps/en-US/sitemap.xml.gz . Nyní je to soubor gzip.

Chvíli mi trvalo, než jsem přišel na to, jak zacházet s tímto novým formátem souborů. Pro budoucí použití je zde úryvek, který ukazuje rozbalení v Node.js.

Fragment používá got k vytváření požadavků HTTP a node-gzip k načtení gzipované sitemapy a její transformaci na řetězec.

const got = require('got');
const { ungzip } = require('node-gzip');

const SITEMAP_URL =
  'https://developer.mozilla.org/sitemaps/en-US/sitemap.xml.gz';

// fetch file
const { body } = await got(SITEMAP_URL, {
    responseType: 'buffer',
  });
  
// unzip the buffered gzipped sitemap
const sitemap = (await ungzip(body)).toString();

Třeba to někomu v budoucnu pomůže. 🙈 Bavte se!