diff --git a/sms_to_csv.mjs b/sms_to_csv.mjs index c47fe7c..a8abf37 100644 --- a/sms_to_csv.mjs +++ b/sms_to_csv.mjs @@ -1,122 +1,127 @@ -import fs from "node-fs"; -import convert from "xml-js"; -import {writeFileInOuputFolderFromJsonObject} from "./utils.mjs"; +import fs from 'node-fs' +import convert from 'xml-js' +import { writeFileInOuputFolderFromJsonObject } from './utils.mjs' /********************** * initialize configs **********************/ -const sourceFileName = 'sms.xml' -const outputFileJson = 'sms-20180423162531.json' -const outputFileCsv = 'sms-20180423162531.tsv' -const outputFileJsonPathFull = '/home/cipherbliss/Nextcloud/ressources/social sorting/output/' + outputFileJson -const sourceFileJson = '/home/cipherbliss/Nextcloud/ressources/social sorting/output/' + outputFileJson -const sourceFilePath = '/home/cipherbliss/Nextcloud/ressources/social sorting/' + sourceFileName; +const sourceFileBaseName = 'sms-20180423162531' +const sourceFileName = `${sourceFileBaseName}.xml` +const outputFileJson = `${sourceFileBaseName}.json` +const outputFileCsv = `${sourceFileBaseName}.tsv` +const folder_base = '/home/tykayn/Nextcloud/ressources/social sorting/' + +const outputFileJsonPathFull = `${folder_base}output/${outputFileJson}` +const sourceFileJson = `${folder_base}output/${outputFileJson}` +const sourceFilePath = folder_base + sourceFileName let headers = [] let tasksObjectsForJsonExport = [] let headersByKind = {} -let writeJsonAfterParse = false; -writeJsonAfterParse = true; +let writeJsonAfterParse = false +writeJsonAfterParse = true /************************************************************** * fetch the source file to read its contents *************************************************************/ -console.log('parse some org file', sourceFilePath) +// console.log('parse some org file', sourceFilePath) if (!sourceFilePath) { - console.error('pas de fichier à ouvrir') + console.error('pas de fichier à ouvrir') } -function convertToCsv(elementsArray) { - elementsArray.forEach(item => { - console.log('item._attributes.date_sent', item._attributes.date_sent) - console.log('item._attributes.contact_name', item._attributes.date_sent) - console.log('item._attributes.body', item._attributes.date_sent) - }) +function convertToCsv (elementsArray) { + elementsArray.forEach(item => { + // console.log('item._attributes.date_sent', item._attributes.date_sent) + // console.log('item._attributes.contact_name', item._attributes.date_sent) + // console.log('item._attributes.body', item._attributes.date_sent) + }) } -function convertJsonToCsv(sourceFilePath, outputFileName) { - fs.readFile(sourceFilePath, 'utf8', function (err, data) { +function convertJsonToCsvAndPersistTSVFile (jsonFilePath, outputFileTSVName) { + // console.log('convertJsonToCsvAndWriteItAs', jsonFilePath, outputFileTSVName) - console.log('data', data) - if (data) { + fs.readFile( folder_base+ jsonFilePath, 'utf8', function (err, data) { - const events = [ + // console.log('data', data) + if (data) { - 'amount\t' + - 'content\t' + - 'description\t' + - 'destination\t' + - 'end\t' + - 'kind of activity\t' + - 'person\t' + - 'place\t' + - 'source\t' + - 'start\t' + - 'unique id\t' + - 'url\t' - ]; - data = JSON.parse(data) - console.log('data', data) - // console.log('data', Object.keys(data[0])) - data['smses']['sms'].forEach(item => { + const events = [ - // convert all fields to common event description - events.push( - '\t' + - item._attributes.body.replace('\n', ' ') + '\t' + - 'sms ' + item._attributes.address + ' le ' + item._attributes.readable_date + '\t' + - item._attributes.address + '\t' + - '' + '\t' + - '' + '\t' + - item._attributes.contact_name + '\t' + - '' + '\t' + - '' + '\t' + - '' + '\t' + - '' + '\t' + - '' + '\t' - ) - }) - console.log('events', events) - writeFileInOuputFolderFromJsonObject(outputFileName, events.join("\n")) + 'amount\t' + + 'content\t' + + 'description\t' + + 'destination\t' + + 'end\t' + + 'kind of activity\t' + + 'person\t' + + 'place\t' + + 'source\t' + + 'start\t' + + 'unique id\t' + + 'url\t' + ] + data = JSON.parse(data) + // console.log('data.length', data.length) + // // console.log('data', Object.keys(data[0])) + data['smses']['sms'].forEach(item => { - } else { - console.error('no data in xml file ' + sourceFilePath) - } - }) + // convert all fields to common event description + events.push( + '\t' + + item._attributes.body.replace('\n', ' ') + '\t' + + 'sms ' + item._attributes.address + ' le ' + item._attributes.readable_date + '\t' + + item._attributes.address + '\t' + + '' + '\t' + + '' + '\t' + + item._attributes.contact_name + '\t' + + '' + '\t' + + '' + '\t' + + '' + '\t' + + '' + '\t' + + '' + '\t' + ) + }) + // // console.log('events', events) + writeFileInOuputFolderFromJsonObject(outputFileTSVName, events.join('\n')).then(res => { + // console.log('res', typeof res) + }) + + } else { + console.error('no data in xml file ' + jsonFilePath) + } + }) } -function openSourceFile() { +function openSourceFile () { - fs.stat(sourceFilePath, function (err, data) { - if (err == null) { - console.log(`File ${sourceFilePath} exists`); + fs.stat(sourceFilePath, function (err, data) { + if (err == null) { + // console.log(`File ${sourceFilePath} exists`) - /********************** - * loop to parse all - *********************/ - fs.readFile(sourceFilePath, 'utf8', function (err, data) { - // console.log('data', data) - var jsonConversion = convert.xml2json(data, {compact: true, spaces: 2}); - // console.log('smses', Object.keys(jsonConversion)) - console.log('jsonConversion[0]', jsonConversion['10']) + /********************** + * loop to parse all + *********************/ + fs.readFile(sourceFilePath, 'utf8', function (err, data) { + // // console.log('data', data) + var jsonConversion = convert.xml2json(data, { compact: true, spaces: 2 }) + // // console.log('jsonConversion keys', Object.keys(jsonConversion)) + // console.log('jsonConversion.length', parseFloat(jsonConversion.length / 1024 / 1024, 2), 'Mo') - writeFileInOuputFolderFromJsonObject(outputFileJsonPathFull, jsonConversion) - convertJsonToCsv(sourceFileJson, outputFileCsv) + writeFileInOuputFolderFromJsonObject(outputFileJson, jsonConversion) + convertJsonToCsvAndPersistTSVFile(outputFileJson, outputFileCsv) - }) + }) + } else if (err.code === 'ENOENT') { + // file does not exist + console.error(`le fichier ${sourceFilePath} est introuvable. Impossible d en extraire des infos.`, err) - } else if (err.code === 'ENOENT') { - // file does not exist - console.error(`le fichier ${sourceFilePath} est introuvable. Impossible d en extraire des infos.`, err); - - } else { - console.log('Some other error: ', err.code); - } - }); + } else { + console.log('Some other error: ', err.code) + } + }) } - openSourceFile() diff --git a/utils.mjs b/utils.mjs index f701527..0367984 100644 --- a/utils.mjs +++ b/utils.mjs @@ -1,4 +1,4 @@ -import fs from "node-fs"; +import fs from 'node-fs' export const headersTsv = 'amount\t' + 'content\t' + @@ -13,22 +13,23 @@ export const headersTsv = 'amount\t' + 'unique id\t' + 'url\t' -const outputAbsolutePath = '/home/tykayn/Nextcloud/ressources/social sorting/output/'; +const outputAbsolutePath = '/home/tykayn/Nextcloud/ressources/social sorting/output/' -export async function writeFileInOuputFolderFromJsonObject(fileName, jsonObjectThing) { +export async function writeFileInOuputFolderFromJsonObject (fileName, jsonObjectThing) { // console.log('statistics.dates', statistics.dates) + let fullpath = `${outputAbsolutePath}${fileName}` return await fs.writeFile( - `${outputAbsolutePath}${fileName}`, + fullpath, JSON.stringify(jsonObjectThing, null, 2), - "utf8", + 'utf8', (err) => { if (err) { - console.log(`Error writing file: ${err}`); + console.log(`Error writing file: ${err}`) } else { - console.log(`File ${fileName} is written successfully!`); + console.log(`File ${fileName} is written successfully! \n\n ${fullpath}`) } } - ); + ) }