-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdateData.js
148 lines (137 loc) · 4.57 KB
/
updateData.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
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
143
144
145
146
147
148
var lolapi = require('leagueapi');
var apidata = require('./apikey/apikey.json');
lolapi.init(apidata.apikey, apidata.region);
lolapi.setRateLimit(apidata.rateLimitPer10s, apidata.rateLimitPer10min);
var regions = ['euw', 'na', 'eune', 'br', 'jp', 'kr', 'tr', 'ru', 'lan', 'las', 'oce'];
var versions = new Array();
var count = 0;
var itemCount;
var mongodb = require('mongodb');
var db;
var championDB, versionDB, itemDB;
if (db == null) {
mongodb.MongoClient.connect('mongodb://localhost:27017/championchallenge', function (err, database) {
if (err) { // ERROR DB
throw err
} else { // connection established
db = database;
championDB = db.collection('champions');
versionDB = db.collection('versions');
itemDB = db.collection('items');
getChampions();
getRealmData();
getItems();
}
});
}
function getChampions() {
lolapi.Static.getChampionList({'champData': 'tags', 'dataById':true}, apidata.region, function (err, list) {
if (err) {
console.log("RIOT API ERROR! While retrieving champions: \n" + err);
} else if (list.data) {
championDB.drop( function (err2, response) {
if (err2) {
console.log("Dropping champion table failed. Was already empty?");
}
var champions = list.data;
var array = Object.keys(champions).map(function(k) { return champions[k] });
var length = array.length;
var finalArray = [];
for (var i = 0; i < array.length; i++) {
finalArray[array[i].id] = array[i];
}
championDB.insert({"champions": finalArray, "array": array}, function (err3, result) {
if (err3)
console.log("ERROR! Updating champions failed!\n" + err3)
else
console.log("=== Champions updated! ===\n");
});
});
} else {
console.log("ERROR! No champions have been returned!");
}
});
}
function getItems() {
itemDB.count(function(err, count) {
itemCount = count;
if (err) {
console.log(err);
} else {
lolapi.Static.getItemList({itemListData: ['maps','inStore','gold']}, function(err2, result) {
if(err2) {
console.log("RIOT API ERROR! While retrieving items: " + err2);
} else {
var items = result.data;
var version = result.version;
for (var key in items) {
setItem(items[key], version);
}
}
});
}
});
}
function setItem(item, version) {
if (item.maps != null && item.maps[11] == true && (item.inStore == null || item.inStore == true) && item.name.indexOf("Enchantment:") == -1 && item.name.indexOf("(Trinket)") == -1 && item.gold.total != null && item.gold.total > 0) {
itemDB.find({"id": item.id}).toArray( function (err3, item2) {
if (err3) {
console.log(err3);
} else if (item2.length) { // ITEM ID EXISTS
itemDB.update(item2[0], { $set: { "name": item.name, "version": version, "gold": item.gold.total } });
console.log("Updated item by id: " + item.id + " -> " + item.name + " (" + item.gold.total + ")");
} else { // ITEM ID DOES NOT EXISTS
var b = itemDB.find({"name": item.name}).toArray( function (err4, item3) {
if (err4) {
console.log(err4);
} else if (item3.length) { // ITEM NAME EXISTS
itemDB.update(item3[0], { $set: { "id": item.id, "version": version, "gold": item.gold.total } });
console.log("Updated item by name: " + item.id + " -> " + item.name + " (" + item.gold.total + ")");
} else { // NEW ITEM
console.log("Added new item: " + item.id + " -> " + item.name + " (" + item.gold.total + ")");
var entry = {
"id": item.id,
"uid": itemCount++,
"name": item.name,
"version": version,
"gold": item.gold.total,
};
itemDB.insert(entry);
}
});
}
})
} else {
console.log(" Ignored: " + item.id + " -> " + item.name);
}
}
function getRealmData() {
lolapi.Static.getRealm(regions[count], function (err, version) {
if (err) {
console.log("RIOT API ERRROR! While retrieving Realm Data: " + err);
} else if (version) {
console.log("=== Data Dragon Version for server '" + regions[count] + "' retrieved! ===");
versions.push({ "server": regions[count], "version": version.dd, "url": version.cdn+"/" });
count++;
if (count < regions.length){
getRealmData();
} else {
saveVersion();
}
} else {
console.log("ERROR! No version for server '" + regions[count] + "' has been returned!");
}
});
}
function saveVersion() {
versionDB.drop( function (err, response) {
versionDB.insert(versions, function (err2, result) {
if (err2)
console.log("ERROR! Updating versions failed!\n" + err2)
else {
console.log("=== Data Dragon Versions updated! ===\nFINISHED\n");
db.close();
}
});
});
}