/** * conversion de sms en XML exportés par Sms backup and restore * au format des évènements csv */ import fs from 'node-fs' import convert from 'xml-js' import { writeFileInOuputFolderFromJsonObject } from './utils.mjs' /********************** * initialize configs **********************/ // const sourceFileBaseName = 'sms-20180423162531' const sourceFileBaseName = 'sms-20230921224605' const sourceFileName = `${sourceFileBaseName}.xml` const outputFileJson = `${sourceFileBaseName}.json` const outputFileCsv = `${sourceFileBaseName}.csv` const folder_base = '/home/tykayn/Nextcloud/ressources/social sorting/' const csv_separator = ';' 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 /************************************************************** * fetch the source file to read its contents *************************************************************/ // console.log('parse some org file', sourceFilePath) if (!sourceFilePath) { 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) }) } /** * convert a json object to a tsv file and save it * @param jsonFilePath * @param outputFileTSVName */ function convertJsonToCsvAndPersistTSVFile (jsonFilePath, outputFileTSVName) { console.log('convertJsonToCsvAndPersistTSVFile ', folder_base+'output/' + jsonFilePath) fs.readFile(folder_base+'output/' + jsonFilePath, 'utf8', function (err, data) { data = JSON.parse(data) console.log('data', data.length) if (data) { const events = [ 'amount' + csv_separator + ''+ 'content' + csv_separator +''+ 'description' + csv_separator + 'destination' + csv_separator + 'end' + csv_separator + 'kind of activity' + csv_separator + 'person' + csv_separator + 'place' + csv_separator + 'source' + csv_separator + 'start' + csv_separator + 'unique id' + csv_separator + 'url' + csv_separator ] // console.log('data', data) // console.log('data other ', data) console.log('data.length', data['elements'].length) console.log('data name', data['elements'][2]['elements'].length) let smslist = data['elements'][2]['elements'] // let smslist = data['smses'] if (smslist) { smslist.forEach(item => { // convert all fields to common event description events.push( ''+csv_separator + item.attributes.body + csv_separator + 'sms ' + item.attributes.address + ' le ' + item.attributes.readable_date + csv_separator + item.attributes.address + csv_separator + '' + csv_separator + '' + csv_separator + item.attributes.contact_name + csv_separator + '' + csv_separator + '' + csv_separator + '' + csv_separator + '' + csv_separator + '' + csv_separator ) }) // // console.log('events', events) writeFileInOuputFolderFromJsonObject(outputFileTSVName, events.join('\n')).then(res => { // console.log('res', typeof res) }) } else { console.log('no sms in data') } } else { console.error('no data in xml file ' + jsonFilePath) } }) } function openSourceFile () { 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) // console.log('jsonConversion 0', Object.keys(jsonConversion['elements'])) // console.log('jsonConversion.length', parseFloat(jsonConversion.length / 1024 / 1024, 2), 'Mo') // writeFileInOuputFolderFromJsonObject(outputFileJson, JSON.parse( jsonConversion)) writeFileInOuputFolderFromJsonObject(outputFileJson, JSON.parse(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 { console.log('Some other error: ', err.code) } }) } openSourceFile() // convertJsonToCsvAndPersistTSVFile(outputFileJson, outputFileCsv)