이정호

final final

...@@ -5,6 +5,14 @@ ...@@ -5,6 +5,14 @@
5 5
6 - `Riot Games Api`를 통한 리그오브레전드 전적검색 사이트 만들기 6 - `Riot Games Api`를 통한 리그오브레전드 전적검색 사이트 만들기
7 7
8 +## 설치 방법
9 +
10 +- 예시 코드 - git clone http://khuhub.khu.ac.kr/2019102212/lolhelper.git
11 +
12 +## 사용 방법
13 +
14 +- 실행 후 소환사명을 검색하면 됨
15 +
8 ## 활용 가능한 데이터 `(API_KEY Required.)` 16 ## 활용 가능한 데이터 `(API_KEY Required.)`
9 17
10 ### `SUMMONER-V4` 18 ### `SUMMONER-V4`
...@@ -17,19 +25,6 @@ ...@@ -17,19 +25,6 @@
17 - 암호화된 소환사 아이디 - `id` 25 - 암호화된 소환사 아이디 - `id`
18 - 암호화된 계정 아이디 - `accountId` 26 - 암호화된 계정 아이디 - `accountId`
19 27
20 -### `CHAMPION-MASTERY-V4`
21 -
22 -> https://kr.api.riotgames.com/lol/champion-mastery/v4/champion-masteries/by-summoner/{encryptedSummonerId}
23 -
24 -- 챔피언 아이디 - `championId`
25 -- 챔피언 숙련도 레벨 - `championLevel`
26 -- 챔피언 숙련도 점수 - `championPoints`
27 -- 챔피언 남은 숙련도 점수 - `championPointsUntilNextLevel` (5레벨에 0 고정)
28 -- 마지막 플레이 시각 - `lastPlayTime`
29 -- 챔피언 레벨 토큰 개수 - `tokensEarned` (5레벨 이후를 위한 토큰)
30 -- 마지막 챔피언 레벨 이후의 숙련도 점수 - `championPointsSinceLastLevel`
31 -- 소환사 아이디 - `summonerId` (암호화)
32 -
33 ### `CHAMPION-V3` 28 ### `CHAMPION-V3`
34 29
35 > https://kr.api.riotgames.com/lol/platform/v3/champion-rotations 30 > https://kr.api.riotgames.com/lol/platform/v3/champion-rotations
...@@ -37,6 +32,36 @@ ...@@ -37,6 +32,36 @@
37 - 금주의 무료 챔피언 - `freeChampionIds` 32 - 금주의 무료 챔피언 - `freeChampionIds`
38 - 뉴비를 위한 무료 챔피언 - `freeChampionIdsForNewPlayers` 33 - 뉴비를 위한 무료 챔피언 - `freeChampionIdsForNewPlayers`
39 34
35 +### `LEAGUE-V4`
36 +
37 +> https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{encryptedSummonerId}
38 +
39 +- 승리 - `wins`
40 +- 패배 - `losses`
41 +- 티어 - `tier`
42 +- 랭크 - `rank`
43 +- LP - `leaguePoints`
44 +
45 +### `MATCH-V4`
46 +
47 +> https://kr.api.riotgames.com/lol/match/v4/matchlists/by-account/{encryptedAccountId}
48 +
49 +- 매치 아이디 - `gameId`
50 +
51 +> https://kr.api.riotgames.com/lol/match/v4/matches/{matchId}
52 +
53 +- 매치 길이 - `gameDuration`
54 +- 플레이한 챔피언 - `championId`
55 +- 승리 여부 - `win`
56 +- 킬 - `kills`
57 +- 데스 - `deaths`
58 +- 어시스트 - `assists`
59 +- 멀티킬 - `largestMultiKill`
60 +- 가한 피해량 - `totalDamageDealtToChampion`
61 +- 받은 피해량 - `totalDamageTaken`
62 +- 획득 골드 - `goldEarned`
63 +- 퍼스트 블러드 - `firstBloodKill`
64 +
40 ## 개발 히스토리 65 ## 개발 히스토리
41 - 2020-05-14 66 - 2020-05-14
42 - 개발툴 및 환경 설정, 주제 선정 67 - 개발툴 및 환경 설정, 주제 선정
...@@ -47,8 +72,11 @@ ...@@ -47,8 +72,11 @@
47 - 2020-06-06 72 - 2020-06-06
48 - css 수정, 전적 검색 기능 추가 73 - css 수정, 전적 검색 기능 추가
49 74
50 -- 2020-06- 75 +- 2020-06-20
51 - - 최종 미팅, 프로젝트 점검 및 발표자료 작성 76 + - 불필요한 데이터 제거, Carry Point 기능 추가
77 +
78 +- 2020-06-24
79 + - 프로젝트 점검 및 발표자료 작성
52 80
53 81
54 ```python 82 ```python
......
...@@ -7,7 +7,7 @@ app.set('views', __dirname + '/views'); ...@@ -7,7 +7,7 @@ app.set('views', __dirname + '/views');
7 app.set('view engine', 'ejs'); 7 app.set('view engine', 'ejs');
8 app.engine('html', require('ejs').renderFile); 8 app.engine('html', require('ejs').renderFile);
9 9
10 -var server = app.listen(3000, function(){ 10 +var server = app.listen(3000, function() {
11 console.log('Success'); 11 console.log('Success');
12 }); 12 });
13 13
......
...@@ -5,7 +5,12 @@ function func(info_match, championId, win, kills, deaths, assists, kda, largestM ...@@ -5,7 +5,12 @@ function func(info_match, championId, win, kills, deaths, assists, kda, largestM
5 kills[num] = info_match["participants"][i]["stats"]["kills"]; 5 kills[num] = info_match["participants"][i]["stats"]["kills"];
6 deaths[num] = info_match["participants"][i]["stats"]["deaths"]; 6 deaths[num] = info_match["participants"][i]["stats"]["deaths"];
7 assists[num] = info_match["participants"][i]["stats"]["assists"]; 7 assists[num] = info_match["participants"][i]["stats"]["assists"];
8 - kda[num] = (kills[num] + assists[num]) / deaths[num]; 8 + if (deaths[num] == 0) {
9 + kda[num] = (kills[num] + assists[num]) * 2
10 + }
11 + if (deaths[num] != 0) {
12 + kda[num] = (kills[num] + assists[num]) / deaths[num];
13 + }
9 largestMultiKill[num] = info_match["participants"][i]["stats"]["largestMultiKill"]; 14 largestMultiKill[num] = info_match["participants"][i]["stats"]["largestMultiKill"];
10 temp[num] = kda[num] * (info_match["participants"][i]["stats"]["totalDamageDealtToChampions"] + info_match["participants"][i]["stats"]["totalDamageTaken"] * info_match["participants"][i]["stats"]["goldEarned"] / info_match["gameDuration"]) / 10000; 15 temp[num] = kda[num] * (info_match["participants"][i]["stats"]["totalDamageDealtToChampions"] + info_match["participants"][i]["stats"]["totalDamageTaken"] * info_match["participants"][i]["stats"]["goldEarned"] / info_match["gameDuration"]) / 10000;
11 firstBloodKill[num] = info_match["participants"][i]["stats"]["firstBloodKill"]; 16 firstBloodKill[num] = info_match["participants"][i]["stats"]["firstBloodKill"];
...@@ -56,7 +61,6 @@ module.exports = function(app) { ...@@ -56,7 +61,6 @@ module.exports = function(app) {
56 var champUrl = "https://kr.api.riotgames.com/lol/champion-mastery/v4/champion-masteries/by-summoner/" + urlenconde(id) + "?api_key=" + apikey; 61 var champUrl = "https://kr.api.riotgames.com/lol/champion-mastery/v4/champion-masteries/by-summoner/" + urlenconde(id) + "?api_key=" + apikey;
57 request(champUrl, function(error, response, body){ 62 request(champUrl, function(error, response, body){
58 var info_champ_json = JSON.parse(body); 63 var info_champ_json = JSON.parse(body);
59 - var champ_point = new Array();
60 var champ_id = new Array(); 64 var champ_id = new Array();
61 var champ_name = new Array(); 65 var champ_name = new Array();
62 var rotation_name = new Array(); 66 var rotation_name = new Array();
...@@ -73,7 +77,6 @@ module.exports = function(app) { ...@@ -73,7 +77,6 @@ module.exports = function(app) {
73 } 77 }
74 78
75 for (var i = 0; i < champions_length; i++) { 79 for (var i = 0; i < champions_length; i++) {
76 - champ_point[i] = (info_champ_json[i]["championPoints"]);
77 champ_id[i] = info_champ_json[i]["championId"]; 80 champ_id[i] = info_champ_json[i]["championId"];
78 } 81 }
79 var rotationUrl = "https://kr.api.riotgames.com/lol/platform/v3/champion-rotations?api_key=" + apikey; 82 var rotationUrl = "https://kr.api.riotgames.com/lol/platform/v3/champion-rotations?api_key=" + apikey;
...@@ -111,10 +114,8 @@ module.exports = function(app) { ...@@ -111,10 +114,8 @@ module.exports = function(app) {
111 request(userLeagueUrl, function(error, response, body){ 114 request(userLeagueUrl, function(error, response, body){
112 var info_user_league_json = JSON.parse(body); 115 var info_user_league_json = JSON.parse(body);
113 if (info_user_league_json[0] != null) { 116 if (info_user_league_json[0] != null) {
114 - var leagueId = info_user_league_json[0]["leagueId"];
115 var wins = info_user_league_json[0]["wins"]; 117 var wins = info_user_league_json[0]["wins"];
116 var losses = info_user_league_json[0]["losses"]; 118 var losses = info_user_league_json[0]["losses"];
117 - var leagueName = info_user_league_json[0]["leagueName"];
118 var tier = info_user_league_json[0]["tier"]; 119 var tier = info_user_league_json[0]["tier"];
119 var rank = info_user_league_json[0]["rank"]; 120 var rank = info_user_league_json[0]["rank"];
120 var leaguePoints = info_user_league_json[0]["leaguePoints"]; 121 var leaguePoints = info_user_league_json[0]["leaguePoints"];
...@@ -216,28 +217,7 @@ module.exports = function(app) { ...@@ -216,28 +217,7 @@ module.exports = function(app) {
216 var info_match = JSON.parse(body); 217 var info_match = JSON.parse(body);
217 func(info_match, championId, win, kills, deaths, assists, kda, largestMultiKill, temp, firstBloodKill, 9); 218 func(info_match, championId, win, kills, deaths, assists, kda, largestMultiKill, temp, firstBloodKill, 9);
218 champ_name[champ_name.length] = "total"; 219 champ_name[champ_name.length] = "total";
219 - var temp_id; 220 +
220 - var temp_name;
221 - var temp_point;
222 - var temp_pic;
223 - for (var i = 0; i < champ_id.length - 1; i++) {
224 - for (var j = i + 1; j < champ_id.length - 1; j++) {
225 - if (champ_point[i] > champ_point[j]) {
226 - temp_id = champ_id[i];
227 - temp_name = champ_name[i];
228 - temp_point = champ_point[i];
229 - temp_pic = champ_pic[i];
230 - champ_id[i] = champ_id[j];
231 - champ_name[i] = champ_name[j];
232 - champ_point[i] = champ_point[j];
233 - champ_pic[i] = champ_pic[j];
234 - champ_id[j] = temp_id;
235 - champ_name[j] = temp_name;
236 - champ_point[j] = temp_point;
237 - champ_pic[j] = temp_pic;
238 - }
239 - }
240 - }
241 const defaultMMR = [ 221 const defaultMMR = [
242 {"mmr" : 900, "tier" : "iron", "rank" : 4}, 222 {"mmr" : 900, "tier" : "iron", "rank" : 4},
243 { "mmr" : 950, "tier" : "iron", "rank" : 3 }, 223 { "mmr" : 950, "tier" : "iron", "rank" : 3 },
...@@ -269,7 +249,6 @@ module.exports = function(app) { ...@@ -269,7 +249,6 @@ module.exports = function(app) {
269 res.render('index', { title: req.params.username , 249 res.render('index', { title: req.params.username ,
270 c_id : champ_id, 250 c_id : champ_id,
271 c_name : champ_name, 251 c_name : champ_name,
272 - c_point : champ_point,
273 c_pic : champ_pic, 252 c_pic : champ_pic,
274 c_rotation : rotation_pic, 253 c_rotation : rotation_pic,
275 c_summoner : summoner, 254 c_summoner : summoner,
......
...@@ -33,21 +33,17 @@ module.exports = function(app) { ...@@ -33,21 +33,17 @@ module.exports = function(app) {
33 request(champUrl, function(error, response, body) { 33 request(champUrl, function(error, response, body) {
34 var info_champ_json = JSON.parse(body); 34 var info_champ_json = JSON.parse(body);
35 var champions = info_champ_json["champions"]; 35 var champions = info_champ_json["champions"];
36 - var champ_point = new Array();
37 var champ_id = new Array(); 36 var champ_id = new Array();
38 var champ_name = new Array(); 37 var champ_name = new Array();
39 var champ_pic = new Array(); 38 var champ_pic = new Array();
40 var champions_length = Object.keys(champions).length; 39 var champions_length = Object.keys(champions).length;
41 40
42 for (var i = 0; i < champions_length; i++) { 41 for (var i = 0; i < champions_length; i++) {
43 - champ_point[i] = (champions[i]["stats"]["totalSessionsWon"] / champions[i]["stats"]["totalSessionsPlayed"] * 200)
44 - + ((champions[i]["stats"]["totalAssists"] + champions[i]["stats"]["totalChampionKills"]) / champions[i]["stats"]["totalDeathsPerSession"] * 100)
45 - + (champions[i]["stats"]["totalSessionsPlayed"] * 3);
46 champ_id[i] = champions[i]["id"]; 42 champ_id[i] = champions[i]["id"];
47 } 43 }
48 44
49 var staticUrl = "https://global.api.pvp.net/api/lol/static-data/kr/v1.2/champion/?api_key=" + apikey; 45 var staticUrl = "https://global.api.pvp.net/api/lol/static-data/kr/v1.2/champion/?api_key=" + apikey;
50 - request(staticUrl, function(error, response, body){ 46 + request(staticUrl, function(error, response, body) {
51 var info_static_champ_json = JSON.parse(body); 47 var info_static_champ_json = JSON.parse(body);
52 var champion = info_static_champ_json["data"]; 48 var champion = info_static_champ_json["data"];
53 for (var i = 0; i < champ_id.length; i++) { 49 for (var i = 0; i < champ_id.length; i++) {
...@@ -61,31 +57,10 @@ module.exports = function(app) { ...@@ -61,31 +57,10 @@ module.exports = function(app) {
61 } 57 }
62 } 58 }
63 champ_name[champ_name.length] = "total"; 59 champ_name[champ_name.length] = "total";
64 - var temp_id; 60 +
65 - var temp_name;
66 - var temp_point;
67 - var temp_pic;
68 - for (var i = 0; i < champ_id.length - 1; i++) {
69 - for (var j = i + 1; j < champ_id.length - 1; j++)
70 - if (champ_point[i] > champ_point[j]) {
71 - temp_id = champ_id[i];
72 - temp_name = champ_name[i];
73 - temp_point = champ_point[i];
74 - temp_pic = champ_pic[i];
75 - champ_id[i] = champ_id[j];
76 - champ_name[i] = champ_name[j];
77 - champ_point[i] = champ_point[j];
78 - champ_pic[i] = champ_pic[j];
79 - champ_id[j] = temp_id;
80 - champ_name[j] = temp_name;
81 - champ_point[j] = temp_point;
82 - champ_pic[j] = temp_pic;
83 - }
84 - }
85 res.render('index', { title: req.params.username, 61 res.render('index', { title: req.params.username,
86 c_id : champ_id, 62 c_id : champ_id,
87 c_name : champ_name, 63 c_name : champ_name,
88 - c_point : champ_point,
89 c_pic : champ_pic, 64 c_pic : champ_pic,
90 c_summoner : summoner 65 c_summoner : summoner
91 }); 66 });
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
24 <img src = "/FindMelogo.png" width = 150, height = 150/> 24 <img src = "/FindMelogo.png" width = 150, height = 150/>
25 </div> 25 </div>
26 <div class = "center2"> 26 <div class = "center2">
27 - <input type = "text" class = "input_text" placeholder = "소환사 이름"> 27 + <input type = "text" class = "input_text" placeholder = "소환사">
28 <span class = "input-group-btn"> 28 <span class = "input-group-btn">
29 <button id = "searchButton" class = "btn btn-primary" type = "button" onclick = "search(name)">click!</button> 29 <button id = "searchButton" class = "btn btn-primary" type = "button" onclick = "search(name)">click!</button>
30 </span> 30 </span>
......