2019-03-24 19:25:45 +00:00
|
|
|
require('dotenv').config()
|
2018-12-01 16:51:26 +00:00
|
|
|
const express = require('express')
|
|
|
|
|
const request = require('request');
|
|
|
|
|
const path = require('path');
|
2018-12-03 21:11:52 +00:00
|
|
|
const bodyParser = require('body-parser');
|
2018-12-05 21:04:16 +00:00
|
|
|
const rp = require('request-promise');
|
2019-03-24 19:25:45 +00:00
|
|
|
const Promise = require("bluebird");
|
2018-12-01 16:51:26 +00:00
|
|
|
const app = express()
|
|
|
|
|
|
2019-03-24 19:25:45 +00:00
|
|
|
/* Global Variables */
|
|
|
|
|
const key = process.env.API_KEY;
|
|
|
|
|
let summonerID;
|
|
|
|
|
let accountID;
|
|
|
|
|
let username;
|
|
|
|
|
let JSONMatches;
|
|
|
|
|
|
|
|
|
|
/* Set Port */
|
|
|
|
|
app.set('port', (process.env.PORT || 5000))
|
2018-12-01 16:51:26 +00:00
|
|
|
|
2018-12-03 21:11:52 +00:00
|
|
|
/* To retrieve data of post request */
|
2018-12-05 21:04:16 +00:00
|
|
|
app.use(bodyParser.json()); // to support JSON-encoded bodies
|
2018-12-03 21:11:52 +00:00
|
|
|
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
|
|
|
|
|
extended: true
|
2018-12-05 21:04:16 +00:00
|
|
|
}));
|
2018-12-03 21:11:52 +00:00
|
|
|
|
2018-12-01 16:51:26 +00:00
|
|
|
/* Homepage */
|
|
|
|
|
app.get('/', function (request, response) {
|
2019-03-18 19:55:33 +00:00
|
|
|
response.sendFile(path.join(__dirname, 'home.html'));
|
|
|
|
|
});
|
|
|
|
|
|
2019-03-24 19:25:45 +00:00
|
|
|
/* Summoners pages */
|
2019-03-18 19:55:33 +00:00
|
|
|
app.get('/summoners', function (request, response) {
|
2019-03-23 20:28:10 +00:00
|
|
|
response.sendFile(path.join(__dirname, 'summoner.html'));
|
2018-12-01 16:51:26 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/* Public assets folder */
|
|
|
|
|
app.use('/public', express.static(__dirname + '/public'));
|
|
|
|
|
|
|
|
|
|
/* Launch app */
|
2018-12-01 16:56:41 +00:00
|
|
|
app.listen(app.get('port'), () => console.log(`RiotAPI test app listening on port ${app.get('port')}!`))
|
2018-12-01 16:51:26 +00:00
|
|
|
|
2019-03-24 19:25:45 +00:00
|
|
|
// Get data of one match
|
2019-03-18 19:55:33 +00:00
|
|
|
async function apicall(urlApi) {
|
2018-12-05 21:04:16 +00:00
|
|
|
//console.log(urlApi);
|
|
|
|
|
return rp({ url: 'https://euw1.api.riotgames.com/lol/match/v4/matches/' + urlApi + '?api_key=' + key, json: true }).then(function (obj) {
|
|
|
|
|
return addMatchToJSON(obj);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-01 16:51:26 +00:00
|
|
|
// Get data of rankeds
|
|
|
|
|
function getRanked(callback) {
|
|
|
|
|
request('https://euw1.api.riotgames.com/lol/league/v4/positions/by-summoner/' + summonerID + '?api_key=' + key, function (error, response, body) {
|
|
|
|
|
if (!error && response.statusCode == 200) {
|
|
|
|
|
callback(body);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// send data of rankeds and of username
|
2018-12-05 21:04:16 +00:00
|
|
|
app.post('/api', function (req, res) {
|
|
|
|
|
//console.log(req.body.playerName);
|
2019-03-24 18:47:13 +00:00
|
|
|
console.time('all')
|
2019-03-24 19:25:45 +00:00
|
|
|
username = req.body.playerName;
|
2018-12-03 21:11:52 +00:00
|
|
|
|
|
|
|
|
getAccountInfos(function (account) {
|
2018-12-11 22:17:33 +00:00
|
|
|
if (!account)
|
|
|
|
|
res.send(null)
|
2018-12-03 21:11:52 +00:00
|
|
|
getRanked(function (ranked) {
|
2018-12-05 21:04:16 +00:00
|
|
|
getMatches(function (matches) {
|
2019-03-24 19:25:45 +00:00
|
|
|
let finalJSON = [];
|
2018-12-03 21:11:52 +00:00
|
|
|
finalJSON.push(account);
|
|
|
|
|
finalJSON.push(ranked);
|
|
|
|
|
finalJSON.push(matches);
|
2019-03-18 19:55:33 +00:00
|
|
|
console.log('Data sent to front');
|
2018-12-03 21:11:52 +00:00
|
|
|
res.send(finalJSON);
|
2019-03-24 18:47:13 +00:00
|
|
|
console.timeEnd('all')
|
2018-12-03 21:11:52 +00:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
2018-12-01 16:51:26 +00:00
|
|
|
// Get account infos of an username
|
|
|
|
|
function getAccountInfos(callback) {
|
2019-03-24 19:25:45 +00:00
|
|
|
request('https://euw1.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + encodeURIComponent(username) + '?api_key=' + key, function (error, response, body) {
|
2018-12-01 16:51:26 +00:00
|
|
|
if (!error && response.statusCode == 200) {
|
2019-03-24 19:25:45 +00:00
|
|
|
let JSONBody = JSON.parse(body);
|
2018-12-05 21:04:16 +00:00
|
|
|
//console.log(JSONBody);
|
2018-12-01 16:51:26 +00:00
|
|
|
summonerID = JSONBody.id;
|
|
|
|
|
accountID = JSONBody.accountId;
|
|
|
|
|
callback(JSONBody);
|
|
|
|
|
}
|
2018-12-11 22:17:33 +00:00
|
|
|
else {
|
2019-03-24 18:47:13 +00:00
|
|
|
console.log(response.statusCode);
|
2018-12-11 22:17:33 +00:00
|
|
|
console.log('username not found');
|
|
|
|
|
callback(null);
|
|
|
|
|
}
|
2018-12-01 16:51:26 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Get matches of an accountID
|
|
|
|
|
function getMatches(callback) {
|
2019-03-18 19:55:33 +00:00
|
|
|
console.time('getMatches');
|
2018-12-05 21:04:16 +00:00
|
|
|
request('https://euw1.api.riotgames.com/lol/match/v4/matchlists/by-account/' + accountID + '?endIndex=10&api_key=' + key, function (error, response, body) {
|
2018-12-01 16:51:26 +00:00
|
|
|
if (!error && response.statusCode == 200) {
|
2018-12-05 21:04:16 +00:00
|
|
|
JSONMatches = JSON.parse(body);
|
2018-12-11 22:17:33 +00:00
|
|
|
|
2019-03-24 19:25:45 +00:00
|
|
|
let matchsId = [];
|
|
|
|
|
for (let i = 0; i < JSONMatches.matches.length; i++) {
|
2018-12-05 21:04:16 +00:00
|
|
|
matchsId[i] = JSONMatches.matches[i].gameId;
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-24 18:47:13 +00:00
|
|
|
Promise.map(matchsId, function (item) { // old: .mapSeries
|
2018-12-05 21:04:16 +00:00
|
|
|
return apicall(item);
|
|
|
|
|
}).then(() => {
|
2019-03-18 19:55:33 +00:00
|
|
|
console.timeEnd('getMatches');
|
2018-12-05 21:04:16 +00:00
|
|
|
console.log('Finished');
|
|
|
|
|
callback(JSONMatches);
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
console.log('Error');
|
2019-03-24 18:47:13 +00:00
|
|
|
console.log(err.statusCode);
|
2018-12-05 21:04:16 +00:00
|
|
|
});
|
|
|
|
|
|
2018-12-01 16:51:26 +00:00
|
|
|
}
|
|
|
|
|
});
|
2018-12-05 21:04:16 +00:00
|
|
|
}
|
|
|
|
|
|
2019-03-24 19:25:45 +00:00
|
|
|
// Add match to global JSON
|
2018-12-05 21:04:16 +00:00
|
|
|
function addMatchToJSON(obj) {
|
|
|
|
|
//console.log(obj.gameId);
|
2019-03-24 19:25:45 +00:00
|
|
|
for (let i = 0; i < JSONMatches.matches.length; i++) {
|
2018-12-11 22:17:33 +00:00
|
|
|
if (JSONMatches.matches[i].gameId == obj.gameId) {
|
2018-12-05 21:04:16 +00:00
|
|
|
//console.log('yes');
|
|
|
|
|
JSONMatches.matches[i] = obj;
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-12-03 21:11:52 +00:00
|
|
|
}
|