김기빈

의존성 모듈 추가

...@@ -46,26 +46,26 @@ app.engine('html', require('ejs').renderFile); ...@@ -46,26 +46,26 @@ app.engine('html', require('ejs').renderFile);
46 var server=app.listen(3000,function(){ 46 var server=app.listen(3000,function(){
47 console.log("Express server has started on port 3000"); 47 console.log("Express server has started on port 3000");
48 48
49 - });//app listen 49 + });//app listen L
50 50
51 // 51 //
52 /* 52 /*
53 -var readline=require('readline');//입력받기 위한 모듈 53 +var readline=require('readline');//입력받기 위한 모듈
54 -var r=readline.createInterface({input:process.stdin,output:process.stdout});//키보드 입출력 정의 54 +var r=readline.createInterface({input:process.stdin,output:process.stdout});//키보드 입출력 정의
55 -var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw에서 기본 검색 url 55 +var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw에서 기본 검색 url
56 -var rtfw2="http://www.rankedftw.com/player/"//rtfw 번호 기반 특정 플레이어 검색 url 56 +var rtfw2="http://www.rankedftw.com/player/"//rtfw 번호 기반 특정 플레이어 검색 url
57 var league='silver_2'; 57 var league='silver_2';
58 var region='KR'; 58 var region='KR';
59 // 59 //
60 -var cheerio=require('cheerio');//cheerio모듈 사용 60 +var cheerio=require('cheerio');//cheerio듈 사용
61 -var request=require('request');//request모듈 사용 61 +var request=require('request');//request듈 사용
62 -var fs=require('fs');//파일시스템 사용 62 +var fs=require('fs');//파일시스템 사용
63 // 63 //
64 //request 1 variable 64 //request 1 variable
65 -var username='';//username문자열 선언 65 +var username='';//username문자열 선언
66 -var userleague='';//userleague 문자열 선언 66 +var userleague='';//userleague 문자열 선언
67 -var userregion='';//userregion 문자열 선언 67 +var userregion='';//userregion 문자열 선언
68 -var usernumber='';//usernumber 문자열 선언 68 +var usernumber='';//usernumber 문자열 선언
69 // 69 //
70 //request 2 variable 70 //request 2 variable
71 71
...@@ -83,82 +83,82 @@ var usernumber='';//usernumber 문자열 선언 ...@@ -83,82 +83,82 @@ var usernumber='';//usernumber 문자열 선언
83 83
84 // 84 //
85 //delivering variable 85 //delivering variable
86 -var momentum;//기세 86 +var momentum;//
87 -var terran_proficiency;//테란 숙련도 87 +var terran_proficiency;//테란 숙련도
88 -var zerg_proficiency;//저그 숙련도 88 +var zerg_proficiency;//저그 숙련도
89 -var protoss_proficiency;//프로토스 숙련도 89 +var protoss_proficiency;//프로토스 숙련도
90 -var primary_race;//주 종족 90 +var primary_race;// 종족
91 -var win_rate;//시즌 전체 승률 91 +var win_rate;//시즌 전체 승률
92 92
93 -var myrace;//내 종족 93 +var myrace;// 종족
94 -var enemyrace;//상대 종족 94 +var enemyrace;//대 종족
95 -var recommend;//추천빌드(운영/타이밍/올인) 95 +var recommend;//추천빌드(운영/타이밍/올인)
96 // 96 //
97 97
98 -r.question("분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에서 callback함수 생성 98 +r.question("분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에서 callback함수 생성
99 - //question은 에러 제어 만들면 안된다. 99 + //question은 에러 제어 만들면 안된다.
100 - console.log("r.question processing");//callback함수란 이벤트가 왔을 때 실행되는 함수이다. answer에 검색을 원하는 아이디가 담겨있다. 100 + console.log("r.question processing");//callback함수란 이벤트가 왔을 때 실행되는 함수이다. answer에 검색을 원하는 아이디가 담겨있다.
101 - rtfw1=rtfw1+answer;//검색 url 구성 101 + rtfw1=rtfw1+answer;//검색 url 구성
102 - console.log(rtfw1);//테스트용 : 검색 url 확인 102 + console.log(rtfw1);//테스트용 : 검색 url 확인
103 // 103 //
104 -request(rtfw1,(error,response,body)=>{//rtfw url 불러오기 request 1 104 +request(rtfw1,(error,response,body)=>{//rtfw url 러오기 request 1
105 - if(error){throw error};//에러처리 105 + if(error){throw error};//러처리
106 console.log("request 1 processing"); 106 console.log("request 1 processing");
107 - let $ = cheerio.load(body);//rtfw가 body이다. $로 jquery방식으로 html탐색 107 + let $ = cheerio.load(body);//rtfw가 body이다. $로 jquery방식으로 html탐색
108 - $('ul').find('a').each(function(index,elem){//ul 태그 아래 a태그를 찾는다. 108 + $('ul').find('a').each(function(index,elem){//ul 태그 아래 a태그를 찾는다.
109 - username=$(this).find('.name').text().trim();//name클래스를 찾아 공백빼고 텍스트화 109 + username=$(this).find('.name').text().trim();//name클래스를 찾아 공백빼고 텍스트화
110 - userleague=$(this).find('.league').text().trim();//league클래스를 찾아 공백빼고 텍스트화 110 + userleague=$(this).find('.league').text().trim();//league클래스를 찾아 공백빼고 텍스트화
111 - userregion=$(this).find('.region').text().trim();//region클래스를 찾아 공백빼고 텍스트화 111 + userregion=$(this).find('.region').text().trim();//region클래스를 찾아 공백빼고 텍스트화
112 - if((username===answer)&&(userregion===region)){//아직 리그 구현 안함-리그는 그림으로 비교 112 + if((username===answer)&&(userregion===region)){//아직 리그 구현 안함-리그는 그림으로 비교
113 - console.log(`${username}`);//테스트용 : 유저네임 출력 113 + console.log(`${username}`);//테스트용 : 유저네임 출력
114 - console.log(`${userregion}`);//테스트용 : 유저리전 출력 114 + console.log(`${userregion}`);//테스트용 : 유저리전 출력
115 - var usernumber=$(this).toString().slice(29,43);//rtfw에서 사용하는 사용자번호를 문자열로 넉넉히 자름 115 + var usernumber=$(this).toString().slice(29,43);//rtfw에서 사용하는 사용자번호를 문자열로 넉넉히 자름
116 - var localindex1=usernumber.search('/');//첫번째 슬레시 발견하는 인덱스 검출 116 + var localindex1=usernumber.search('/');//첫번째 슬레시 발견하는 인덱스 검출
117 - usernumber=usernumber.slice(localindex1+1);//앞부분 슬래시 자른다. 117 + usernumber=usernumber.slice(localindex1+1);//앞부분 슬래시 자른다.
118 - var localindex2=usernumber.search('/')-localindex1+1;//두번째 슬레시 발견하는 인덱스 검출 118 + var localindex2=usernumber.search('/')-localindex1+1;//두번째 슬레시 발견하는 인덱스 검출
119 - usernumber=usernumber.slice(0,localindex2);//뒷부분 슬래시 자른다. 119 + usernumber=usernumber.slice(0,localindex2);//뒷부분 슬래시 자른다.
120 - console.log(`${usernumber}`);//테스트용 : 유저넘버 출력 120 + console.log(`${usernumber}`);//테스트용 : 유저넘버 출력
121 - if(rtfw2.length>33){//하나라도 붙어있으면 121 + if(rtfw2.length>33){//하나라도 붙어있으면
122 - rtfw2=rtfw2;//아무것도 안한다. 122 + rtfw2=rtfw2;//아무것도 안한다.
123 - }else{//그렇지않고 아무것도 안붙어있으면 123 + }else{//그렇지않고 아무것도 안붙어있으면
124 - rtfw2=rtfw2+usernumber+'/';//rtfw2 url갱신 124 + rtfw2=rtfw2+usernumber+'/';//rtfw2 url갱신
125 } 125 }
126 - console.log(rtfw2);//테스트용 : rtfw2 출력 126 + console.log(rtfw2);//테스트용 : rtfw2 출력
127 - }//이름서버리그비교if종료 127 + }//이름서버리그비교if종료
128 - });//ul a find문 종료 128 + });//ul a find 종료
129 129
130 var profileID=''; 130 var profileID='';
131 - request(rtfw2,(error,response,body)=>{//rtfw2 url 불러오기 request 2 131 + request(rtfw2,(error,response,body)=>{//rtfw2 url 러오기 request 2
132 - if(error){throw error};//에러처리 132 + if(error){throw error};//러처리
133 - console.log('request2 processing');//테스트용 : request2 실행여부 출력 133 + console.log('request2 processing');//테스트용 : request2 실행여부 출력
134 - let $ = cheerio.load(body);//rtfw2가 body이다. $로 jquery방식으로 html탐색 134 + let $ = cheerio.load(body);//rtfw2가 body이다. $로 jquery방식으로 html탐색
135 - $('.content').find('.bnet-link').each(function(index,elem){//content 클래스 안의 bnet-link클래스를 포함하는 요소를 찾는다. 135 + $('.content').find('.bnet-link').each(function(index,elem){//content 클래스 안의 bnet-link클래스를 포함하는 요소를 찾는다.
136 - profileID=$(this).toString().slice(62,72);//얻고자 하는 profileID를 포함하여 앞뒤로 적당히 자른다. 136 + profileID=$(this).toString().slice(62,72);//얻고자 하는 profileID를 포함하여 앞뒤로 적당히 자른다.
137 - var localindex3=profileID.search('/');//첫번째 슬레시 발견하는 인덱스 검출 137 + var localindex3=profileID.search('/');//첫번째 슬레시 발견하는 인덱스 검출
138 - profileID=profileID.slice(localindex3+1);//앞부분 슬래시 자른다. 138 + profileID=profileID.slice(localindex3+1);//앞부분 슬래시 자른다.
139 - var localindex4=profileID.search('/')-localindex3;//두번째 슬레시 발견하는 인덱스 검출 139 + var localindex4=profileID.search('/')-localindex3;//두번째 슬레시 발견하는 인덱스 검출
140 - profileID=profileID.slice(0,localindex4);//뒷부분 슬래시 자른다. 140 + profileID=profileID.slice(0,localindex4);//뒷부분 슬래시 자른다.
141 - console.log(`${profileID}`);//테스트용 : profileID 출력 141 + console.log(`${profileID}`);//테스트용 : profileID 출력
142 - //profileID=encodeURI(encodeURIComponent(profileID));//한글처리부 142 + //profileID=encodeURI(encodeURIComponent(profileID));//한글처리부
143 - });//a bnetlink 종료 143 + });//a bnetlink 종료
144 -//console.log(`${profileID}`);//테스트용 : profileID 출력 144 +//console.log(`${profileID}`);//테스트용 : profileID 출력
145 145
146 -var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"//매치히스토리 url 앞부분 146 +var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"//매치히스토리 url 앞부분
147 -var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"//매치히스토리 url 뒷부분 147 +var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"//매치히스토리 url 뒷부분
148 -var match_history_url=match_history_1+profileID+match_history_2;//매치히스토리 url 구성 148 +var match_history_url=match_history_1+profileID+match_history_2;//매치히스토리 url 구성
149 -console.log(match_history_url);//테스트용 : 매치히스토리 url 출력 149 +console.log(match_history_url);//테스트용 : 매치히스토리 url 출력
150 150
151 request(match_history_url,(error,response,body)=>{//match history request request 3 151 request(match_history_url,(error,response,body)=>{//match history request request 3
152 - if(error){throw error};//에러처리 152 + if(error){throw error};//러처리
153 - console.log('request3 processing');//테스트용 : request 작동여부 출력 153 + console.log('request3 processing');//테스트용 : request 작동여부 출력
154 154
155 -var obj1=JSON.parse(body);//request 결과를 JSON object로 변환 155 +var obj1=JSON.parse(body);//request 결과를 JSON object로 변환
156 -//console.log(obj.matches [0].map);//테스트용 : 하나에 접근 156 +//console.log(obj.matches [0].map);//테스트용 : 하나에 접근
157 -$(obj1.matches).each(function(index,match){//body에서 각각의 배열요소 match들과 인덱스 사용 157 +$(obj1.matches).each(function(index,match){//body에서 각각의 배열요소 match들과 인덱스 사용
158 - if(match.type=='1v1'){//경기타입이 1대1인 경우에만 관심있다. 158 + if(match.type=='1v1'){//경기타입이 1대1인 경우에만 관심있다.
159 - console.log(index+":::",match.decision,match.map);//인덱스와 승패, 맵 표시 159 + console.log(index+":::",match.decision,match.map);//인덱스와 승패, 맵 표시
160 -};//if 1v1 종료 160 +};//if 1v1 종료
161 -});//each function 종료 161 +});//each function 종료
162 162
163 var ladder_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/" 163 var ladder_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"
164 var ladder_2="/ladders?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"; 164 var ladder_2="/ladders?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi";
...@@ -167,8 +167,8 @@ console.log(ladder_url); ...@@ -167,8 +167,8 @@ console.log(ladder_url);
167 request(ladder_url,(error,response,body)=>{//ladder request request 4 167 request(ladder_url,(error,response,body)=>{//ladder request request 4
168 if(error){throw error}; 168 if(error){throw error};
169 console.log('request4 processing'); 169 console.log('request4 processing');
170 - var obj2=JSON.parse(body);//request 결과를 JSON object로 변환 170 + var obj2=JSON.parse(body);//request 결과를 JSON object로 변환
171 -// console.log(obj2.currentSeason [2].ladder[0].wins);//테스트용 : 하나에 접근 171 +// console.log(obj2.currentSeason [2].ladder[0].wins);//테스트용 : 하나에 접근
172 var wins=obj2.currentSeason[2].ladder[0].wins; 172 var wins=obj2.currentSeason[2].ladder[0].wins;
173 var losses=obj2.currentSeason[2].ladder[0].losses; 173 var losses=obj2.currentSeason[2].ladder[0].losses;
174 win_rate=wins/(wins+losses); 174 win_rate=wins/(wins+losses);
...@@ -183,8 +183,8 @@ console.log(profile_url); ...@@ -183,8 +183,8 @@ console.log(profile_url);
183 request(profile_url,(error,response,body)=>{//profile request request 5 183 request(profile_url,(error,response,body)=>{//profile request request 5
184 if(error){throw error}; 184 if(error){throw error};
185 console.log('request5 processing'); 185 console.log('request5 processing');
186 - var obj3=JSON.parse(body);//request 결과를 JSON object로 변환 186 + var obj3=JSON.parse(body);//request 결과를 JSON object로 변환
187 - //console.log(obj2.currentSeason [1].ladder[0].wins);//테스트용 : 하나에 접근 187 + //console.log(obj2.currentSeason [1].ladder[0].wins);//테스트용 : 하나에 접근
188 primary_race=obj3.career.primaryRace; 188 primary_race=obj3.career.primaryRace;
189 //console.log(primary_race); 189 //console.log(primary_race);
190 var terran_level=obj3.swarmLevels.terran.level; 190 var terran_level=obj3.swarmLevels.terran.level;
...@@ -196,70 +196,70 @@ primary_race=obj3.career.primaryRace; ...@@ -196,70 +196,70 @@ primary_race=obj3.career.primaryRace;
196 //console.log(protoss_level); 196 //console.log(protoss_level);
197 197
198 //build recommend algorithm 198 //build recommend algorithm
199 -var matchresults=[];//매치결과 담을 배열 선언 199 +var matchresults=[];//매치결과 담을 배열 선언
200 -var momentum_win=0;//최근 10경기 중 승수 초기화 200 +var momentum_win=0;//최근 10경기 중 승수 초기화
201 -for (var i=0;i<25;i++){//매치히스토리는 최대 25개 201 +for (var i=0;i<25;i++){//매치히스토리는 최대 25개
202 - if(obj1.matches[i].type=='1v1'){//1v1에만 관심있다. 202 + if(obj1.matches[i].type=='1v1'){//1v1에만 관심있다.
203 - matchresults.push(obj1.matches[i].decision);//배열 끝에 결과 삽입 203 + matchresults.push(obj1.matches[i].decision);//배열 끝에 결과 삽입
204 - if((matchresults.length<11)&&(obj1.matches[i].decision=='Win')){//최근 10경기에서 승리한 경우 204 + if((matchresults.length<11)&&(obj1.matches[i].decision=='Win')){//최근 10경기에서 승리한 경우
205 - momentum_win=momentum_win+1;//그 승수를 카운트한다. 205 + momentum_win=momentum_win+1;//그 승수를 카운트한다.
206 - }//if length11 종료 206 + }//if length11 종료
207 -}//obj1 1v1 종료 207 +}//obj1 1v1 종료
208 -}//for i 25 종료 208 +}//for i 25 종료
209 -//console.log(matchresults);//테스트용 : matchresults 출력 209 +//console.log(matchresults);//테스트용 : matchresults 출력
210 -//console.log(momentum_win);//테스트용 : momentum_win 출력 210 +//console.log(momentum_win);//테스트용 : momentum_win 출력
211 -if(momentum_win>=7){//7승 이상이면 상승세 211 +if(momentum_win>=7){//7승 이상이면 상승세
212 -momentum='상승세'; 212 +momentum='승세';
213 } 213 }
214 -if((momentum_win<7)&&(momentum_win>=4)){//4승이상 7승미만이면 정체 214 +if((momentum_win<7)&&(momentum_win>=4)){//4승이상 7승미만이면 정체
215 -momentum='정체중'; 215 +momentum='체중';
216 } 216 }
217 -if(momentum_win<4){//4승 미만이면 하락세 217 +if(momentum_win<4){//4승 미만이면 하락세
218 -momentum='하락세'; 218 +momentum='락세';
219 } 219 }
220 -//console.log(momentum);//테스트용 : 기세 출력 220 +//console.log(momentum);//테스트용 : 기세 출력
221 221
222 -if(terran_level<50){//테란 레벨 50 안되면 222 +if(terran_level<50){//테란 레벨 50 안되면
223 - terran_proficiency='비숙련자'//테란 비숙련자 223 + terran_proficiency='비숙련자'//테란 비숙련자
224 } else{ 224 } else{
225 - terran_proficiency='숙련자' 225 + terran_proficiency='숙련자'
226 } 226 }
227 -if(zerg_level<50){//저그 레벨 50 안되면 227 +if(zerg_level<50){//저그 레벨 50 안되면
228 - zerg_proficiency='비숙련자'//저그 비숙련자 228 + zerg_proficiency='비숙련자'//저그 비숙련자
229 } else{ 229 } else{
230 - zerg_proficiency='숙련자' 230 + zerg_proficiency='숙련자'
231 } 231 }
232 -if(protoss_level<50){//프로토스 레벨 50 안되면 232 +if(protoss_level<50){//프로토스 레벨 50 안되면
233 - protoss_proficiency='비숙련자'//프로토스 비숙련자 233 + protoss_proficiency='비숙련자'//프로토스 비숙련자
234 } else{ 234 } else{
235 - protoss_proficiency='숙련자' 235 + protoss_proficiency='숙련자'
236 } 236 }
237 // 237 //
238 //system message part 238 //system message part
239 -console.log("최근 10경기 분석 결과 현재 상대는 '"+momentum+"'입니다."); 239 +console.log("최근 10경기 분석 결과 현재 상대는 '"+momentum+"'입니다.");
240 -console.log("상대는 테란 '"+terran_proficiency+"'입니다."); 240 +console.log("상대는 테란 '"+terran_proficiency+"'입니다.");
241 -console.log("상대는 저그 '"+zerg_proficiency+"'입니다."); 241 +console.log("상대는 저그 '"+zerg_proficiency+"'입니다.");
242 -console.log("상대는 프로토스 '"+protoss_proficiency+"'입니다."); 242 +console.log("상대는 프로토스 '"+protoss_proficiency+"'입니다.");
243 -console.log("상대의 주 종족은 '"+primary_race+"'입니다."); 243 +console.log("상대의 주 종족은 '"+primary_race+"'입니다.");
244 -console.log("상대의 이번 시즌 전체 승률은 '"+win_rate+"'입니다."); 244 +console.log("상대의 이번 시즌 전체 승률은 '"+win_rate+"'입니다.");
245 // 245 //
246 //build recommend command 246 //build recommend command
247 247
248 // 248 //
249 249
250 console.log('request5 done'); 250 console.log('request5 done');
251 -});//request5종료 251 +});//request5종료
252 console.log('request4 done'); 252 console.log('request4 done');
253 -});//request4종료 253 +});//request4종료
254 console.log('request3 done'); 254 console.log('request3 done');
255 -});//request3종료 255 +});//request3종료
256 console.log('request2 done'); 256 console.log('request2 done');
257 -});//request2종료 257 +});//request2종료
258 console.log('request1 done'); 258 console.log('request1 done');
259 -});//request1 종료 259 +});//request1 종료
260 260
261 console.log('r.question done'); 261 console.log('r.question done');
262 //console.log(terran_level); 262 //console.log(terran_level);
263 -r.close()//반드시 close를 해줘야 한다.사용이 다 끝난 후에. 263 +r.close()//반드시 close를 해줘야 한다.사용이 다 끝난 후에.
264 -});//r.question 264 +});//r.question 끝
265 */ 265 */
......
1 { 1 {
2 - "requires": true, 2 + "name": "starcraft2",
3 + "version": "1.0.0",
3 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 + "requires": true,
4 "dependencies": { 6 "dependencies": {
5 "@types/node": { 7 "@types/node": {
6 "version": "10.12.14", 8 "version": "10.12.14",
...@@ -117,6 +119,16 @@ ...@@ -117,6 +119,16 @@
117 "qs": "6.5.2", 119 "qs": "6.5.2",
118 "raw-body": "2.3.3", 120 "raw-body": "2.3.3",
119 "type-is": "~1.6.16" 121 "type-is": "~1.6.16"
122 + },
123 + "dependencies": {
124 + "iconv-lite": {
125 + "version": "0.4.23",
126 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
127 + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
128 + "requires": {
129 + "safer-buffer": ">= 2.1.2 < 3"
130 + }
131 + }
120 } 132 }
121 }, 133 },
122 "boolbase": { 134 "boolbase": {
...@@ -150,6 +162,16 @@ ...@@ -150,6 +162,16 @@
150 "htmlparser2": "^3.9.1", 162 "htmlparser2": "^3.9.1",
151 "lodash": "^4.15.0", 163 "lodash": "^4.15.0",
152 "parse5": "^3.0.1" 164 "parse5": "^3.0.1"
165 + },
166 + "dependencies": {
167 + "parse5": {
168 + "version": "3.0.3",
169 + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
170 + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
171 + "requires": {
172 + "@types/node": "*"
173 + }
174 + }
153 } 175 }
154 }, 176 },
155 "combined-stream": { 177 "combined-stream": {
...@@ -538,9 +560,9 @@ ...@@ -538,9 +560,9 @@
538 } 560 }
539 }, 561 },
540 "iconv-lite": { 562 "iconv-lite": {
541 - "version": "0.4.23", 563 + "version": "0.4.24",
542 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 564 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
543 - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 565 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
544 "requires": { 566 "requires": {
545 "safer-buffer": ">= 2.1.2 < 3" 567 "safer-buffer": ">= 2.1.2 < 3"
546 } 568 }
...@@ -606,13 +628,6 @@ ...@@ -606,13 +628,6 @@
606 "whatwg-url": "^7.0.0", 628 "whatwg-url": "^7.0.0",
607 "ws": "^6.1.0", 629 "ws": "^6.1.0",
608 "xml-name-validator": "^3.0.0" 630 "xml-name-validator": "^3.0.0"
609 - },
610 - "dependencies": {
611 - "parse5": {
612 - "version": "5.1.0",
613 - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
614 - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
615 - }
616 } 631 }
617 }, 632 },
618 "json-schema": { 633 "json-schema": {
...@@ -743,12 +758,9 @@ ...@@ -743,12 +758,9 @@
743 } 758 }
744 }, 759 },
745 "parse5": { 760 "parse5": {
746 - "version": "3.0.3", 761 + "version": "5.1.0",
747 - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 762 + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
748 - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 763 + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
749 - "requires": {
750 - "@types/node": "*"
751 - }
752 }, 764 },
753 "parseurl": { 765 "parseurl": {
754 "version": "1.3.2", 766 "version": "1.3.2",
...@@ -813,6 +825,16 @@ ...@@ -813,6 +825,16 @@
813 "http-errors": "1.6.3", 825 "http-errors": "1.6.3",
814 "iconv-lite": "0.4.23", 826 "iconv-lite": "0.4.23",
815 "unpipe": "1.0.0" 827 "unpipe": "1.0.0"
828 + },
829 + "dependencies": {
830 + "iconv-lite": {
831 + "version": "0.4.23",
832 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
833 + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
834 + "requires": {
835 + "safer-buffer": ">= 2.1.2 < 3"
836 + }
837 + }
816 } 838 }
817 }, 839 },
818 "readable-stream": { 840 "readable-stream": {
...@@ -850,6 +872,22 @@ ...@@ -850,6 +872,22 @@
850 "tough-cookie": "~2.4.3", 872 "tough-cookie": "~2.4.3",
851 "tunnel-agent": "^0.6.0", 873 "tunnel-agent": "^0.6.0",
852 "uuid": "^3.3.2" 874 "uuid": "^3.3.2"
875 + },
876 + "dependencies": {
877 + "punycode": {
878 + "version": "1.4.1",
879 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
880 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
881 + },
882 + "tough-cookie": {
883 + "version": "2.4.3",
884 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
885 + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
886 + "requires": {
887 + "psl": "^1.1.24",
888 + "punycode": "^1.4.1"
889 + }
890 + }
853 } 891 }
854 }, 892 },
855 "request-promise-core": { 893 "request-promise-core": {
...@@ -927,7 +965,8 @@ ...@@ -927,7 +965,8 @@
927 "source-map": { 965 "source-map": {
928 "version": "0.6.1", 966 "version": "0.6.1",
929 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 967 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
930 - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 968 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
969 + "optional": true
931 }, 970 },
932 "sshpk": { 971 "sshpk": {
933 "version": "1.15.2", 972 "version": "1.15.2",
...@@ -969,19 +1008,12 @@ ...@@ -969,19 +1008,12 @@
969 "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" 1008 "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
970 }, 1009 },
971 "tough-cookie": { 1010 "tough-cookie": {
972 - "version": "2.4.3", 1011 + "version": "2.5.0",
973 - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1012 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
974 - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1013 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
975 "requires": { 1014 "requires": {
976 - "psl": "^1.1.24", 1015 + "psl": "^1.1.28",
977 - "punycode": "^1.4.1" 1016 + "punycode": "^2.1.1"
978 - },
979 - "dependencies": {
980 - "punycode": {
981 - "version": "1.4.1",
982 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
983 - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
984 - }
985 } 1017 }
986 }, 1018 },
987 "tr46": { 1019 "tr46": {
...@@ -1094,16 +1126,6 @@ ...@@ -1094,16 +1126,6 @@
1094 "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", 1126 "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
1095 "requires": { 1127 "requires": {
1096 "iconv-lite": "0.4.24" 1128 "iconv-lite": "0.4.24"
1097 - },
1098 - "dependencies": {
1099 - "iconv-lite": {
1100 - "version": "0.4.24",
1101 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1102 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1103 - "requires": {
1104 - "safer-buffer": ">= 2.1.2 < 3"
1105 - }
1106 - }
1107 } 1129 }
1108 }, 1130 },
1109 "whatwg-mimetype": { 1131 "whatwg-mimetype": {
......
1 +{
2 + "name": "starcraft2",
3 + "version": "1.0.0",
4 + "description": "< 스타크래프트2 빌드 추천 프로젝트 >\r 설명 : 대전 상대의 실력 정도에 따라 빌드를 추천해줌",
5 + "main": "app.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1"
8 + },
9 + "repository": {
10 + "type": "git",
11 + "url": "http://khuhub.khu.ac.kr/2013104051/OSS_StarCraft2_Project.git"
12 + },
13 + "author": "",
14 + "license": "ISC",
15 + "dependencies": {
16 + "body-parser": "^1.18.3",
17 + "cheerio": "^1.0.0-rc.2",
18 + "ejs": "^2.6.1",
19 + "express": "^4.16.4",
20 + "jquery": "^3.3.1",
21 + "jsdom": "^13.0.0",
22 + "request": "^2.88.0"
23 + }
24 +}