Toggle navigation
Toggle navigation
This project
Loading...
Sign in
오원석
/
StarCraft2 Build Recommendation
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
김기빈
2018-12-14 02:06:56 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ffe2f9457da3d2305b1c98af3ade7da32297b7da
ffe2f945
1 parent
55933f24
의존성 모듈 추가
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
207 additions
and
161 deletions
app.js
package-lock.json
package.json
app.js
View file @
ffe2f94
...
...
@@ -46,26 +46,26 @@ app.engine('html', require('ejs').renderFile);
var
server
=
app
.
listen
(
3000
,
function
(){
console
.
log
(
"Express server has started on port 3000"
);
});
//app listen
꿑
});
//app listen
L
//
/*
var readline=require('readline');//
입력받기 위한 모듈
var r=readline.createInterface({input:process.stdin,output:process.stdout});//
키보드 입출력 정의
var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw
에서 기본 검색
url
var rtfw2="http://www.rankedftw.com/player/"//rtfw
번호 기반 특정 플레이어 검색
url
var readline=require('readline');//
입력받기
위한 모듈
var r=readline.createInterface({input:process.stdin,output:process.stdout});//
키보드
입출력 정의
var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw
에서 기
본 검색 url
var rtfw2="http://www.rankedftw.com/player/"//rtfw
번호 기반 특정
플레이어 검색 url
var league='silver_2';
var region='KR';
//
var cheerio=require('cheerio');//cheerio
모듈 사용
var request=require('request');//request
모듈 사용
var fs=require('fs');//
파일시스템 사용
var cheerio=require('cheerio');//cheerio
모
듈 사용
var request=require('request');//request
모
듈 사용
var fs=require('fs');//
파일시
스템 사용
//
//request 1 variable
var username='';//username
문자열 선언
var userleague='';//userleague
문자열 선언
var userregion='';//userregion
문자열 선언
var usernumber='';//usernumber
문자열 선언
var username='';//username
문자
열 선언
var userleague='';//userleague
문자
열 선언
var userregion='';//userregion
문자
열 선언
var usernumber='';//usernumber
문자
열 선언
//
//request 2 variable
...
...
@@ -83,82 +83,82 @@ var usernumber='';//usernumber 문자열 선언
//
//delivering variable
var momentum;//
기세
var terran_proficiency;//
테란 숙련도
var zerg_proficiency;//
저그 숙련도
var protoss_proficiency;//
프로토스 숙련도
var primary_race;//
주 종족
var win_rate;//
시즌 전체 승률
var momentum;//
기
세
var terran_proficiency;//
테란
숙련도
var zerg_proficiency;//
저그
숙련도
var protoss_proficiency;//
프로토
스 숙련도
var primary_race;//
주
종족
var win_rate;//
시즌 전
체 승률
var myrace;//
내 종족
var enemyrace;//
상대 종족
var recommend;//
추천빌드(운영/타이밍/올인
)
var myrace;//
내
종족
var enemyrace;//
상
대 종족
var recommend;//
추천빌드(운영
/타이밍/올인)
//
r.question("
분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에서 callback함수 생성
//question
은 에러 제어 만들면 안된다
.
console.log("r.question processing");//callback
함수란 이벤트가 왔을 때 실행되는 함수이다. answer에 검색을 원하는 아이디가 담겨있다
.
rtfw1=rtfw1+answer;//
검색 url 구성
console.log(rtfw1);//
테스트용 : 검색 url 확인
r.question("
분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에
서 callback함수 생성
//question
은 에러 제
어 만들면 안된다.
console.log("r.question processing");//callback
함수란 이벤트가 왔을 때 실행되는 함수이다. an
swer에 검색을 원하는 아이디가 담겨있다.
rtfw1=rtfw1+answer;//
검색 url
구성
console.log(rtfw1);//
테스트용 : 검색 ur
l 확인
//
request(rtfw1,(error,response,body)=>{//rtfw url
불러오기
request 1
if(error){throw error};//
에러처리
request(rtfw1,(error,response,body)=>{//rtfw url
불
러오기 request 1
if(error){throw error};//
에
러처리
console.log("request 1 processing");
let $ = cheerio.load(body);//rtfw
가 body이다. $로 jquery방식으로 html탐색
$('ul').find('a').each(function(index,elem){//ul
태그 아래 a태그를 찾는다
.
username=$(this).find('.name').text().trim();//name
클래스를 찾아 공백빼고 텍스트화
userleague=$(this).find('.league').text().trim();//league
클래스를 찾아 공백빼고 텍스트화
userregion=$(this).find('.region').text().trim();//region
클래스를 찾아 공백빼고 텍스트화
if((username===answer)&&(userregion===region)){//
아직 리그 구현 안함-리그는 그림으로 비교
console.log(`${username}`);//
테스트용 : 유저네임 출력
console.log(`${userregion}`);//
테스트용 : 유저리전 출력
var usernumber=$(this).toString().slice(29,43);//rtfw
에서 사용하는 사용자번호를 문자열로 넉넉히 자름
var localindex1=usernumber.search('/');//
첫번째 슬레시 발견하는 인덱스 검출
usernumber=usernumber.slice(localindex1+1);//
앞부분 슬래시 자른다
.
var localindex2=usernumber.search('/')-localindex1+1;//
두번째 슬레시 발견하는 인덱스 검출
usernumber=usernumber.slice(0,localindex2);//
뒷부분 슬래시 자른다
.
console.log(`${usernumber}`);//
테스트용 : 유저넘버 출력
if(rtfw2.length>33){//
하나라도 붙어있으면
rtfw2=rtfw2;//
아무것도 안한다
.
}else{//
그렇지않고 아무것도 안붙어있으면
rtfw2=rtfw2+usernumber+'/';//rtfw2 url
갱신
let $ = cheerio.load(body);//rtfw
가 body이다. $로 jquery방식으
로 html탐색
$('ul').find('a').each(function(index,elem){//ul
태그 아래 a태그를
찾는다.
username=$(this).find('.name').text().trim();//name
클래스를 찾아 공
백빼고 텍스트화
userleague=$(this).find('.league').text().trim();//league
클래스를 찾아 공
백빼고 텍스트화
userregion=$(this).find('.region').text().trim();//region
클래스를 찾아 공
백빼고 텍스트화
if((username===answer)&&(userregion===region)){//
아직 리그 구현
안함-리그는 그림으로 비교
console.log(`${username}`);//
테스트용 :
유저네임 출력
console.log(`${userregion}`);//
테스트용 :
유저리전 출력
var usernumber=$(this).toString().slice(29,43);//rtfw
에서 사용하는 사용자
번호를 문자열로 넉넉히 자름
var localindex1=usernumber.search('/');//
첫번째 슬레시 발
견하는 인덱스 검출
usernumber=usernumber.slice(localindex1+1);//
앞부분 슬
래시 자른다.
var localindex2=usernumber.search('/')-localindex1+1;//
두번째 슬레시 발
견하는 인덱스 검출
usernumber=usernumber.slice(0,localindex2);//
뒷부분 슬
래시 자른다.
console.log(`${usernumber}`);//
테스트용 :
유저넘버 출력
if(rtfw2.length>33){//
하나라
도 붙어있으면
rtfw2=rtfw2;//
아무것도
안한다.
}else{//
그렇지않고 아무
것도 안붙어있으면
rtfw2=rtfw2+usernumber+'/';//rtfw2 url갱신
}
console.log(rtfw2);//
테스트용 : rtfw2 출력
}//
이름서버리그비교if종료
});//ul a find
문 종료
console.log(rtfw2);//
테스트용 : rtfw
2 출력
}//
이름서버
리그비교if종료
});//ul a find
문
종료
var profileID='';
request(rtfw2,(error,response,body)=>{//rtfw2 url
불러오기
request 2
if(error){throw error};//
에러처리
console.log('request2 processing');//
테스트용 : request2 실행여부 출력
let $ = cheerio.load(body);//rtfw2
가 body이다. $로 jquery방식으로 html탐색
$('.content').find('.bnet-link').each(function(index,elem){//content
클래스 안의 bnet-link클래스를 포함하는 요소를 찾는다
.
profileID=$(this).toString().slice(62,72);//
얻고자 하는 profileID를 포함하여 앞뒤로 적당히 자른다
.
var localindex3=profileID.search('/');//
첫번째 슬레시 발견하는 인덱스 검출
profileID=profileID.slice(localindex3+1);//
앞부분 슬래시 자른다
.
var localindex4=profileID.search('/')-localindex3;//
두번째 슬레시 발견하는 인덱스 검출
profileID=profileID.slice(0,localindex4);//
뒷부분 슬래시 자른다
.
console.log(`${profileID}`);//
테스트용 : profileID 출력
//profileID=encodeURI(encodeURIComponent(profileID));//
한글처리부
});//a bnetlink
종료
//console.log(`${profileID}`);//
테스트용 : profileID 출력
request(rtfw2,(error,response,body)=>{//rtfw2 url
불
러오기 request 2
if(error){throw error};//
에
러처리
console.log('request2 processing');//
테스트용 : request2
실행여부 출력
let $ = cheerio.load(body);//rtfw2
가 body이다. $로 jquery방식으
로 html탐색
$('.content').find('.bnet-link').each(function(index,elem){//content
클래스 안의 bnet-link클래스를
포함하는 요소를 찾는다.
profileID=$(this).toString().slice(62,72);//
얻고자 하는 profileID를 포함
하여 앞뒤로 적당히 자른다.
var localindex3=profileID.search('/');//
첫번째 슬레시 발
견하는 인덱스 검출
profileID=profileID.slice(localindex3+1);//
앞부분 슬
래시 자른다.
var localindex4=profileID.search('/')-localindex3;//
두번째 슬레시 발
견하는 인덱스 검출
profileID=profileID.slice(0,localindex4);//
뒷부분 슬
래시 자른다.
console.log(`${profileID}`);//
테스트용 : profileI
D 출력
//profileID=encodeURI(encodeURIComponent(profileID));//
한글
처리부
});//a bnetlink 종료
//console.log(`${profileID}`);//
테스트용 : profileI
D 출력
var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"//
매치히스토리 url 앞부분
var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"//
매치히스토리 url 뒷부분
var match_history_url=match_history_1+profileID+match_history_2;//
매치히스토리 url 구성
console.log(match_history_url);//
테스트용 : 매치히스토리 url 출력
var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"//
매치히스토리 ur
l 앞부분
var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"//
매치히스토리 ur
l 뒷부분
var match_history_url=match_history_1+profileID+match_history_2;//
매치히스토리
url 구성
console.log(match_history_url);//
테스트용 : 매치히스토
리 url 출력
request(match_history_url,(error,response,body)=>{//match history request request 3
if(error){throw error};//
에러처리
console.log('request3 processing');//
테스트용 : request 작동여부 출력
if(error){throw error};//
에
러처리
console.log('request3 processing');//
테스트용 : request
작동여부 출력
var obj1=JSON.parse(body);//request
결과를 JSON object로 변환
//console.log(obj.matches [0].map);//
테스트용 : 하나에 접근
$(obj1.matches).each(function(index,match){//body
에서 각각의 배열요소 match들과 인덱스 사용
if(match.type=='1v1'){//
경기타입이 1대1인 경우에만 관심있다
.
console.log(index+":::",match.decision,match.map);//
인덱스와 승패, 맵 표시
};//if 1v1
종료
});//each function
종료
var obj1=JSON.parse(body);//request
결과를 JSON objec
t로 변환
//console.log(obj.matches [0].map);//
테스트용 :
하나에 접근
$(obj1.matches).each(function(index,match){//body
에서 각각의 배열요소
match들과 인덱스 사용
if(match.type=='1v1'){//
경기타입이 1대
1인 경우에만 관심있다.
console.log(index+":::",match.decision,match.map);//
인덱스와 승
패, 맵 표시
};//if 1v1 종료
});//each function 종료
var ladder_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"
var ladder_2="/ladders?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi";
...
...
@@ -167,8 +167,8 @@ console.log(ladder_url);
request(ladder_url,(error,response,body)=>{//ladder request request 4
if(error){throw error};
console.log('request4 processing');
var obj2=JSON.parse(body);//request
결과를 JSON object로 변환
// console.log(obj2.currentSeason [2].ladder[0].wins);//
테스트용 : 하나에 접근
var obj2=JSON.parse(body);//request
결과를 JSON objec
t로 변환
// console.log(obj2.currentSeason [2].ladder[0].wins);//
테스트용 :
하나에 접근
var wins=obj2.currentSeason[2].ladder[0].wins;
var losses=obj2.currentSeason[2].ladder[0].losses;
win_rate=wins/(wins+losses);
...
...
@@ -183,8 +183,8 @@ console.log(profile_url);
request(profile_url,(error,response,body)=>{//profile request request 5
if(error){throw error};
console.log('request5 processing');
var obj3=JSON.parse(body);//request
결과를 JSON object로 변환
//console.log(obj2.currentSeason [1].ladder[0].wins);//
테스트용 : 하나에 접근
var obj3=JSON.parse(body);//request
결과를 JSON objec
t로 변환
//console.log(obj2.currentSeason [1].ladder[0].wins);//
테스트용 :
하나에 접근
primary_race=obj3.career.primaryRace;
//console.log(primary_race);
var terran_level=obj3.swarmLevels.terran.level;
...
...
@@ -196,70 +196,70 @@ primary_race=obj3.career.primaryRace;
//console.log(protoss_level);
//build recommend algorithm
var matchresults=[];//
매치결과 담을 배열 선언
var momentum_win=0;//
최근 10경기 중 승수 초기화
for (var i=0;i<25;i++){//
매치히스토리는 최대 25개
if(obj1.matches[i].type=='1v1'){//1v1
에만 관심있다
.
matchresults.push(obj1.matches[i].decision);//
배열 끝에 결과 삽입
if((matchresults.length<11)&&(obj1.matches[i].decision=='Win')){//
최근 10경기에서 승리한 경우
momentum_win=momentum_win+1;//
그 승수를 카운트한다
.
}//if length11
종료
}//obj1 1v1
종료
}//for i 25
종료
//console.log(matchresults);//
테스트용 : matchresults 출력
//console.log(momentum_win);//
테스트용 : momentum_win 출력
if(momentum_win>=7){//7
승 이상이면 상승세
momentum='
상승세
';
var matchresults=[];//
매치결과
담을 배열 선언
var momentum_win=0;//
최근 10경기 중
승수 초기화
for (var i=0;i<25;i++){//
매치히스토리는
최대 25개
if(obj1.matches[i].type=='1v1'){//1v1
에만
관심있다.
matchresults.push(obj1.matches[i].decision);//
배열 끝
에 결과 삽입
if((matchresults.length<11)&&(obj1.matches[i].decision=='Win')){//
최근 10경기에
서 승리한 경우
momentum_win=momentum_win+1;//
그 승수를
카운트한다.
}//if length11 종료
}//obj1 1v1 종료
}//for i 25 종료
//console.log(matchresults);//
테스트용 : matchresult
s 출력
//console.log(momentum_win);//
테스트용 : momentum_wi
n 출력
if(momentum_win>=7){//7
승 이상이
면 상승세
momentum='
상
승세';
}
if((momentum_win<7)&&(momentum_win>=4)){//4
승이상 7승미만이면 정체
momentum='
정체중
';
if((momentum_win<7)&&(momentum_win>=4)){//4
승이상 7승미만
이면 정체
momentum='
정
체중';
}
if(momentum_win<4){//4
승 미만이면 하락세
momentum='
하락세
';
if(momentum_win<4){//4
승 미만이
면 하락세
momentum='
하
락세';
}
//console.log(momentum);//
테스트용 : 기세 출력
//console.log(momentum);//
테스트용 :
기세 출력
if(terran_level<50){//
테란 레벨 50 안되면
terran_proficiency='
비숙련자'//테란 비숙련자
if(terran_level<50){//
테란 레벨 50
안되면
terran_proficiency='
비숙련자'
//테란 비숙련자
} else{
terran_proficiency='
숙련자
'
terran_proficiency='숙련자'
}
if(zerg_level<50){//
저그 레벨 50 안되면
zerg_proficiency='
비숙련자'//저그 비숙련자
if(zerg_level<50){//
저그 레벨 5
0 안되면
zerg_proficiency='
비숙련자
'//저그 비숙련자
} else{
zerg_proficiency='
숙련자
'
zerg_proficiency='숙련자'
}
if(protoss_level<50){//
프로토스 레벨 50 안되면
protoss_proficiency='
비숙련자'//프로토스 비숙련자
if(protoss_level<50){//
프로토스 레벨
50 안되면
protoss_proficiency='
비숙련자'
//프로토스 비숙련자
} else{
protoss_proficiency='
숙련자
'
protoss_proficiency='숙련자'
}
//
//system message part
console.log("
최근 10경기 분석 결과 현재 상대는 '"+momentum+"'입니다
.");
console.log("
상대는 테란 '"+terran_proficiency+"'입니다
.");
console.log("
상대는 저그 '"+zerg_proficiency+"'입니다
.");
console.log("
상대는 프로토스 '"+protoss_proficiency+"'입니다
.");
console.log("
상대의 주 종족은 '"+primary_race+"'입니다
.");
console.log("
상대의 이번 시즌 전체 승률은 '"+win_rate+"'입니다
.");
console.log("
최근 10경기 분석 결과 현재 상대는 '"+mo
mentum+"'입니다.");
console.log("
상대는 테란 '"+terran_proficiency+
"'입니다.");
console.log("
상대는 저그 '"+zerg_proficiency
+"'입니다.");
console.log("
상대는 프로토스 '"+protoss_proficienc
y+"'입니다.");
console.log("
상대의 주 종족은 '"+primary_ra
ce+"'입니다.");
console.log("
상대의 이번 시즌 전체 승률은 '"+win_
rate+"'입니다.");
//
//build recommend command
//
console.log('request5 done');
});//request5
종료
});//request5종료
console.log('request4 done');
});//request4
종료
});//request4종료
console.log('request3 done');
});//request3
종료
});//request3종료
console.log('request2 done');
});//request2
종료
});//request2종료
console.log('request1 done');
});//request1
종료
});//request1 종료
console.log('r.question done');
//console.log(terran_level);
r.close()//
반드시 close를 해줘야 한다.사용이 다 끝난 후에
.
});//r.question
끝
r.close()//
반드시 close를 해줘야
한다.사용이 다 끝난 후에.
});//r.question 끝
*/
...
...
package-lock.json
View file @
ffe2f94
{
"requires"
:
true
,
"name"
:
"starcraft2"
,
"version"
:
"1.0.0"
,
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"@types/node"
:
{
"version"
:
"10.12.14"
,
...
...
@@ -117,6 +119,16 @@
"qs"
:
"6.5.2"
,
"raw-body"
:
"2.3.3"
,
"type-is"
:
"~1.6.16"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz"
,
"integrity"
:
"sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"boolbase"
:
{
...
...
@@ -150,6 +162,16 @@
"htmlparser2"
:
"^3.9.1"
,
"lodash"
:
"^4.15.0"
,
"parse5"
:
"^3.0.1"
},
"dependencies"
:
{
"parse5"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz"
,
"integrity"
:
"sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA=="
,
"requires"
:
{
"@types/node"
:
"*"
}
}
}
},
"combined-stream"
:
{
...
...
@@ -538,9 +560,9 @@
}
},
"iconv-lite"
:
{
"version"
:
"0.4.2
3
"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.2
3
.tgz"
,
"integrity"
:
"sha512-
neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvD
A=="
,
"version"
:
"0.4.2
4
"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.2
4
.tgz"
,
"integrity"
:
"sha512-
v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/r
A=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
...
...
@@ -606,13 +628,6 @@
"whatwg-url"
:
"^7.0.0"
,
"ws"
:
"^6.1.0"
,
"xml-name-validator"
:
"^3.0.0"
},
"dependencies"
:
{
"parse5"
:
{
"version"
:
"5.1.0"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz"
,
"integrity"
:
"sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
}
}
},
"json-schema"
:
{
...
...
@@ -743,12 +758,9 @@
}
},
"parse5"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz"
,
"integrity"
:
"sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA=="
,
"requires"
:
{
"@types/node"
:
"*"
}
"version"
:
"5.1.0"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz"
,
"integrity"
:
"sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
},
"parseurl"
:
{
"version"
:
"1.3.2"
,
...
...
@@ -813,6 +825,16 @@
"http-errors"
:
"1.6.3"
,
"iconv-lite"
:
"0.4.23"
,
"unpipe"
:
"1.0.0"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz"
,
"integrity"
:
"sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"readable-stream"
:
{
...
...
@@ -850,6 +872,22 @@
"tough-cookie"
:
"~2.4.3"
,
"tunnel-agent"
:
"^0.6.0"
,
"uuid"
:
"^3.3.2"
},
"dependencies"
:
{
"punycode"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
,
"integrity"
:
"sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"tough-cookie"
:
{
"version"
:
"2.4.3"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz"
,
"integrity"
:
"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ=="
,
"requires"
:
{
"psl"
:
"^1.1.24"
,
"punycode"
:
"^1.4.1"
}
}
}
},
"request-promise-core"
:
{
...
...
@@ -927,7 +965,8 @@
"source-map"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
,
"integrity"
:
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
"integrity"
:
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
,
"optional"
:
true
},
"sshpk"
:
{
"version"
:
"1.15.2"
,
...
...
@@ -969,19 +1008,12 @@
"integrity"
:
"sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
},
"tough-cookie"
:
{
"version"
:
"2.
4.3
"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.
4.3
.tgz"
,
"integrity"
:
"sha512-
Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ
=="
,
"version"
:
"2.
5.0
"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.
5.0
.tgz"
,
"integrity"
:
"sha512-
nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g
=="
,
"requires"
:
{
"psl"
:
"^1.1.24"
,
"punycode"
:
"^1.4.1"
},
"dependencies"
:
{
"punycode"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
,
"integrity"
:
"sha1-wNWmOycYgArY4esPpSachN1BhF4="
}
"psl"
:
"^1.1.28"
,
"punycode"
:
"^2.1.1"
}
},
"tr46"
:
{
...
...
@@ -1094,16 +1126,6 @@
"integrity"
:
"sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw=="
,
"requires"
:
{
"iconv-lite"
:
"0.4.24"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"whatwg-mimetype"
:
{
...
...
package.json
0 → 100644
View file @
ffe2f94
{
"name"
:
"starcraft2"
,
"version"
:
"1.0.0"
,
"description"
:
"< 스타크래프트2 빌드 추천 프로젝트 >
\r
설명 : 대전 상대의 실력 정도에 따라 빌드를 추천해줌"
,
"main"
:
"app.js"
,
"scripts"
:
{
"test"
:
"echo
\"
Error: no test specified
\"
&& exit 1"
},
"repository"
:
{
"type"
:
"git"
,
"url"
:
"http://khuhub.khu.ac.kr/2013104051/OSS_StarCraft2_Project.git"
},
"author"
:
""
,
"license"
:
"ISC"
,
"dependencies"
:
{
"body-parser"
:
"^1.18.3"
,
"cheerio"
:
"^1.0.0-rc.2"
,
"ejs"
:
"^2.6.1"
,
"express"
:
"^4.16.4"
,
"jquery"
:
"^3.3.1"
,
"jsdom"
:
"^13.0.0"
,
"request"
:
"^2.88.0"
}
}
Please
register
or
login
to post a comment