const fs = require('fs'); const path = require('path'); const fetch = require('node-fetch'); // For CommonJS const { start } = require('repl'); const request = require('request'); let { render } = require("mustache"); const DATA_INPUT_FOLDER = './input'; const DATA_OUTPUT_FOLDER = './output'; const TEMPLATES_FOLDER = './templates'; function generateMarkdown(type) { const folderPath = `${DATA_INPUT_FOLDER}/${type}`; const files = fs.readdirSync(folderPath); const jsonFiles = files.filter(file => file.endsWith('.json')); const summary = []; jsonFiles.forEach(file => { const startYear = path.basename(file, '.json'); const filePath = path.join(folderPath, file); const content = fs.readFileSync(filePath, 'utf8'); const data = JSON.parse(content); //Init year for summaries yearObject = {}; yearObject.year = startYear; yearObject.count = data.length; //Init months object for summary let months = {}; let template = fs.readFileSync(`./${TEMPLATES_FOLDER}/${type}.md`).toString() data.map((conference) => { let month = conference.date.substring(5, 7); let output = render(template, conference) if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}`)) { fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}`); } if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}`)) { fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}`); } if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}`)) { fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}`); } fs.writeFileSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}/${conference.date}-${conference.activity}.md`, output) //Add month count for summary const m = conference.date.substring(5,7); if( !months.hasOwnProperty( m ) ){ months[m] = [] } months[m].push( m ) }) let monthsArray = []; for ( const month in months) { let mObject = {}; mObject.month = month; mObject.count = months[month].length; monthsArray.push( mObject ); } //Sort monthsarray monthsArray.sort((a,b) => b.month - a.month); // b - a for reverse sort yearObject.months = monthsArray; summary.push( yearObject ); }) fs.writeFileSync(`./${DATA_OUTPUT_FOLDER}/${type}/${type}.json`, JSON.stringify(summary.reverse(), null, 2)); console.log(`Summary created successfully.`); } async function generateJson( type, year ) { let options = { json: true }; let fields = []; fields['conferences'] = [ 'date_updated', 'title', 'date', 'activity', 'place', 'city', 'state', 'country', 'duration', 'thumbnail', 'translations.languages_code', 'translations.youtube', 'translations.video', 'translations.audio', 'translations.pdf', 'translations.pdf_simple', 'translations.text_published' ] fields['activities'] = [ 'title', 'date', 'activity', 'place', 'city', 'state', 'country', 'duration', 'thumbnail', 'draft', 'translations.languages_code', 'translations.youtube', 'translations.mp3', 'translations.pdf', 'translations.pdf_booklet', 'translations.interventions.text', 'translations.date_updated' ] let url = `https://directus.carpa.com/items/${type}?fields=${fields[type].join(",")}&deep[translations][_filter][languages_code][_eq]=es&filter[year(date)]=${year}&access_token=dUILDpE5gV224XqOB5xUTzE69sk8VSOL&limit=1000&sort=-date`; if(type=='conferences'){ url = url + '&filter[public]=true' } request(url, options, (error, res, body) => { if (error) { return console.log(error) }; if (!error && res.statusCode == 200) { // do something with JSON, using the 'body' variable if (!fs.existsSync(`./${DATA_INPUT_FOLDER}/${type}`)) { fs.mkdirSync(`./${DATA_INPUT_FOLDER}/${type}`); } fs.writeFile(`./${DATA_INPUT_FOLDER}/${type}/${year}.json`, JSON.stringify(body.data), (err) => { if (err) { console.error("Error writing file:", err); return; } console.log("File has been written successfully!"); }); }; }); } //generateJson( 'conferences', 2014 ); //generateJson( 'activities' , 2021 ); // setTimeout( () => { // generateMarkdown( 'conferences' ) // }, 5000 ); //generateMarkdown( 'activities' ); generateMarkdown( 'conferences' ); // for( let year = 1974; year < 2019; year++){ // generateJson( 'conferences', year ); // setTimeout(()=>{console.log('Year :' & year)},2000); // }