-
Notifications
You must be signed in to change notification settings - Fork 1
/
characters.js
108 lines (95 loc) · 3.03 KB
/
characters.js
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
var api = require('marvel-api');
var fs = require('fs');
var marvel = api.createClient({
publicKey: '',
privateKey: ''
});
//Class
function Characters() {
// always initialize all instance properties
this.characters_filename = "data/marvel_characters_list.xls";
this.writeStream = fs.createWriteStream(this.characters_filename);
this.maxcount = 100;
this.offset = 0;
this.totalCharacters = 0;
this.resultFunction = (function (data) {
// parenthesis are not necessary
this.PrintResultsintoExcel(data) // but might improve readability
}).bind(this);
}
//Print Header Method
Characters.prototype.printHeader = function () {
var header = "Character_ID" +
"\t" + "Character_Name" +
//"\t" + "Character_Description" +
"\t" + "Comics_Count" +
"\t" + "Series_Count" +
"\t" + "Stories_Count" +
"\t" + "Events_Count" +
"\t" + "Detail_Link" +
"\t" + "Wiki_Link" +
"\t" + "Comic_link" + "\n";
this.writeStream.write(header);
};
//Error Handling method
Characters.prototype.errorHandling = function (data) {
console.error(data);
};
//Connect to Marvel API for characters
Characters.prototype.getCharactersFromAPI = function () {
marvel.characters.findAll(this.maxcount, this.offset)
.then(this.resultFunction)
.fail(this.errorHandling)
.done();
}
//Get All characters from marvel api
Characters.prototype.getALLCharacters = function () {
this.printHeader();
this.getCharactersFromAPI(this.offset, this.maxcount);
}
//Print All results into Excel
Characters.prototype.PrintResultsintoExcel = function (res) {
var dataValue = res.data;
for (var i = 0; i < dataValue.length; i++) {
this.printEachRow(dataValue[i]);
}
this.totalCharacters = res.meta.total;
this.offset = res.meta.offset + res.meta.count;
console.log("Current Offset : " + this.offset + " TotalCharacters:" + res.meta.total + ": Count:" + res.meta.count);
if (this.offset < this.totalCharacters) {
this.getCharactersFromAPI(this.offset);
} else {
this.writeStream.close();
}
};
//Print each character in Excel Sheet
Characters.prototype.printEachRow = function (character) {
var urls = character.urls;
var detail = "";
var wiki = "";
var comic = "";
for (var j = 0; j < urls.length; j++) {
if (urls[j].type == "detail") {
detail = urls[j].url;
}
if (urls[j].type == "wiki") {
wiki = urls[j].url;
}
if (urls[j].type == "comiclink") {
comic = urls[j].url;
}
}
var row = character.id +
"\t" + character.name +
//"\t" + character.description +
"\t" + character.comics.available +
"\t" + character.series.available +
"\t" + character.stories.available +
"\t" + character.events.available +
"\t" + detail +
"\t" + wiki +
"\t" + comic + "\n";
this.writeStream.write(row);
}
//Export as Class
module.exports = Characters;