Me pregunto cómo obtener datos comprimidos de una URL ( https://developers.google.com/transit/gtfs/examples/sample-feed.zip ) y convertir cada archivo csv en un enlace Javascript Array of Objects.
Por ejemplo, de las rutas.txt, quiero obtener:
routes = [ { route_id: 'AB' agency_id: 'DTA' route_short_name: '10' route_long_name: 'Airport - Bullfrog' route_desc: null route_type: 3 route_url: null route_color: null route_text_color: null }, { route_id: 'BFC' agency_id: 'DTA' route_short_name: '20' route_long_name: 'Bullfrog - Furnace Creek Resort' route_desc: null route_type: 3 route_url: null route_color: null route_text_color: null } ... ]Todas las operaciones deben realizarse directamente en el navegador.
Primero, traté de usar Zip.js, pero creo que no sé cómo controlar el uso de promesas.
let GTFS_URL = `http://sjc.infobus.engdb.com.br/infoponto/google_transit.zip` const GTFS_ZIP = new zip.ZipReader(new zip.HttpReader(GTFS_URL)) const entries = await GTFS_ZIP.getEntries() console.log(entries) if (entries.length) { // get first entry content as text by using a TextWriter const text = await entries[0].getData( // writer new zip.TextWriter(), // options { onprogress: (index, max) => { // onprogress callback } } ); // text contains the entry data as a String console.log(text); } // close the ZipReader await reader.close(); } )SyntaxError no detectado: await solo es válido en funciones asíncronas y los cuerpos de módulos de nivel superior
Luego, probé la solución JSzip
let GTFS_URL = `https://developers.google.com/transit/gtfs/examples/sample-feed.zip` var zip = new JSZip(); zip.loadAsync(GTFS_URL) .then(function (GTFS_URL) { console.log(GTFS_URL) alert("OK") }, function () { alert("Not a valid zip file") });Vi muchas preguntas similares aquí en stackoverflow, pero no pude hacer que ninguna de estas funcionara de la manera que necesito.