Showing
5 changed files
with
54 additions
and
72 deletions
... | @@ -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> | ... | ... |
-
Please register or login to post a comment