-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcreateTimeLineJSON.js
More file actions
142 lines (130 loc) · 5.22 KB
/
Copy pathcreateTimeLineJSON.js
File metadata and controls
142 lines (130 loc) · 5.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
var request = require('sync-request');
var replaceall = require("replaceall");
var Excel = require('exceljs');
var HashMap = require('hashmap');
var cheerio = require('cheerio');
var fs = require('fs');
var excelXlsx = require('xlsx');
var jsonfile = require('jsonfile')
global.isProcessRunning = false;
//Create WorkBook
var workbook = new Excel.Workbook();
workbook.xlsx.readFile("data/marvel_characters_list.xlsx")
.then(function (worksheet) {
console.log("Open Excel Sheet");
getTimelineData(worksheet);
});
function getTimelineData(worksheet) {
var worksheet = workbook.getWorksheet(1);
console.log("Getting Character Info");
var timeLineJSON = new Array();
worksheet.eachRow(function (row, rowNumber) {
if (rowNumber > 1 && rowNumber <= 51) {
var characterID = worksheet.getCell('A' + rowNumber).value;
var characterName = worksheet.getCell('B' + rowNumber).value;
var filename = characterName + "_" + characterID + "_List.xlsx";
console.log("filename" + ":" + filename);
var character = new comicTimelLine(filename, characterName, characterID);
var characterArray = character.getCharacterJSON();
//console.log(" characterArray: " + JSON.stringify(characterArray));
timeLineJSON.push(new timelineObject(characterName, characterArray));
require('deasync').loopWhile(function () {
return !global.isProcessRunning;
});
global.isProcessRunning = false;
}
});
var file = 'data/JSON/TimeLine.json';
jsonfile.writeFile(file, timeLineJSON, {
spaces: 2
}, function (err) {
console.error(err);
});
}
function comicTimelLine(filename, characterName, characterID) {
this.filename = filename;
this.characterName = characterName;
this.characterID = characterID;
this.characterBook = excelXlsx.readFile("data/comics/" + this.filename);
this.characterSheet = this.characterBook.Sheets[this.characterBook.SheetNames[0]];
}
//Get All characters from marvel api
comicTimelLine.prototype.getCharacterJSON = function () {
var characterArray = computeTimeLine(this.characterSheet, this.characterName, this.characterID);
global.isProcessRunning = true;
return characterArray;
}
function computeTimeLine(characterBook, characterName, characterID) {
var yearObject = new HashMap();
for (z in characterBook) {
var tt = 0;
for (var i = 0; i < z.length; i++) {
if (!isNaN(z[i])) {
tt = i;
break;
}
};
var col = z.substring(0, tt);
var row = parseInt(z.substring(tt));
/* all keys that do not begin with "!" correspond to cell addresses */
if (z[0] === '!') continue;
if (z[0] === 'Q') {
if (row != 1) {
var comicDate = JSON.stringify(characterBook[z].v);
var name_cell = 'A' + row;
var name = JSON.stringify(characterBook[name_cell].v);
var parsedDate = comicDate.substring(1, 11);
var parsedYear = parsedDate.substring(0, 4);
if ((parsedDate.charAt(0) == "-")) {
//Do nothing
} else {
if (yearObject.has(parsedYear)) {
var dateArray = yearObject.get(parsedYear);
dateArray.push(parsedDate);
yearObject.set(parsedYear, dateArray);
} else {
var dateArray = new Array();
dateArray.push(parsedDate);
yearObject.set(parsedYear, dateArray);
}
// console.log(name + ":" + parsedDate);
}
}
}
}
var characterArray = new Array();
yearObject.forEach(function (value, key) {
//console.log(key + " : " + JSON.stringify(value));
var endYear = key;
var endDateArray = value;
var currentYear = parseInt(key) - 1;
while (yearObject.has(currentYear + "")) {
endYear = currentYear;
endDateArray = yearObject.get(endYear + "");
yearObject.remove(currentYear + "");
currentYear = currentYear - 1;
}
//console.log("StartYear" + endYear + ":EndYear" + key);
var dateArray = value;
if (endYear == key) {
var eachObject = new CharacterTimeLineObject(characterName, dateArray[dateArray.length - 1], endDateArray[0], characterID);
} else {
var eachObject = new CharacterTimeLineObject(characterName, endDateArray[0], dateArray[dateArray.length - 1], characterID);
}
//console.log("StartDate :" + endDateArray[0] + ": EndDate :" + dateArray[dateArray.length - 1]);
characterArray.push(eachObject);
});
console.log("====================================")
return characterArray;
}
module.exports = comicTimelLine;
function CharacterTimeLineObject(name, startDate, endDate, characterId) {
this.name = name;
this.start = startDate;
this.end = endDate;
this.characterId = characterId;
}
function timelineObject(name, data) {
this.name = name;
this.data = data;
}