api/carpa_json_to_markdown/index.js

168 lines
4.6 KiB
JavaScript

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