신기성

FindUser.js 주석 정리, 추가구현사항과 알고리즘 계획 포함한 process3.txt 추가

1 var readline=require('readline');//입력받기 위한 모듈 1 var readline=require('readline');//입력받기 위한 모듈
2 var r=readline.createInterface({input:process.stdin,output:process.stdout});//키보드 입출력 정의 2 var r=readline.createInterface({input:process.stdin,output:process.stdout});//키보드 입출력 정의
3 var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw에서 기본 검색 url 3 var rtfw1="http://www.rankedftw.com/search/?name=";//rtfw에서 기본 검색 url
4 -var rtfw2="http://www.rankedftw.com/player/" 4 +var rtfw2="http://www.rankedftw.com/player/"//rtfw 번호 기반 특정 플레이어 검색 url
5 var league='silver_2'; 5 var league='silver_2';
6 var region='KR'; 6 var region='KR';
7 // 7 //
...@@ -9,51 +9,36 @@ var cheerio=require('cheerio');//cheerio모듈 사용 ...@@ -9,51 +9,36 @@ var cheerio=require('cheerio');//cheerio모듈 사용
9 var request=require('request');//request모듈 사용 9 var request=require('request');//request모듈 사용
10 var fs=require('fs');//파일시스템 사용 10 var fs=require('fs');//파일시스템 사용
11 // 11 //
12 -//var client=require('cheerio-httpcli'); 12 +//request 1 variable
13 -//var param={}; 13 +var username='';//username문자열 선언
14 -//var urltype=require('url'); 14 +var userleague='';//userleague 문자열 선언
15 +var userregion='';//userregion 문자열 선언
16 +var usernumber='';//usernumber 문자열 선언
17 +//
18 +//request 2 variable
19 +
20 +//
21 +//request 3-1 variable
22 +
23 +//
24 +//request 3-2 variable
25 +
26 +//
27 +//request 3-3 variable
28 +
29 +//
30 +//system message
31 +
15 // 32 //
16 -//class MatchHistory{
17 -// @SerializedName("matches")
18 -// public List<Matches> matches;
19 -//class Matches{
20 -// @SerializedName("map")
21 -// public String map;
22 -// @SerializedName("type")
23 -// public String type;
24 -// @SerializedName("decision")
25 -// public String decision;
26 -//}
27 -//}
28 33
29 r.question("분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에서 callback함수 생성 34 r.question("분석을 원하는 아이디를 입력하세요 : ",function(answer){//question메소드에서 callback함수 생성
30 console.log("입력완료! 분석중...");//callback함수란 이벤트가 왔을 때 실행되는 함수이다. answer에 검색을 원하는 아이디가 담겨있다. 35 console.log("입력완료! 분석중...");//callback함수란 이벤트가 왔을 때 실행되는 함수이다. answer에 검색을 원하는 아이디가 담겨있다.
31 rtfw1=rtfw1+answer;//검색 url 구성 36 rtfw1=rtfw1+answer;//검색 url 구성
32 console.log(rtfw1);//테스트용 : 검색 url 확인 37 console.log(rtfw1);//테스트용 : 검색 url 확인
33 - // 38 +//
34 - //client.fetch(rtfw,param,function(err,$,res){ 39 +request(rtfw1,(error,response,body)=>{//rtfw url 불러오기 request 1
35 - //if(err){console.log(err);return;}
36 - // var src=$(this).attr('src');
37 - // src=urltype.resolve(url,src);
38 - //var filename=urltype.parse(src).pathname;
39 - // fname=savedir+'/'+fname.replace(/[^a-zA-Z0-9\.]+/g, '_');
40 - // request(src).pipe(fs.createWriteStream(fname));
41 - //});
42 - //
43 -// var parsing_html=fs.readFile(rtfw,'utf8',(err,data)=>{//html reading fs 사용
44 -//err? console.log(err) : console.log('okay cheerio!');//에러나면 에러출력, 이외엔 okay 메시지
45 -var username='';//username문자열 선언
46 -var userleague='';//userleague 문자열 선언
47 -var userregion='';//userregion 문자열 선언
48 -var usernumber='';//usernumber 문자열 선언
49 -request(rtfw1,(error,response,body)=>{//rtfw url 불러오기
50 if(error){throw error};//에러처리 40 if(error){throw error};//에러처리
51 let $ = cheerio.load(body);//rtfw가 body이다. $로 jquery방식으로 html탐색 41 let $ = cheerio.load(body);//rtfw가 body이다. $로 jquery방식으로 html탐색
52 -// try{//try_catch구문
53 - //let username='';//username문자열 선언
54 - //let userleague='';//userleague 문자열 선언
55 - //let userregion='';//userregion 문자열 선언
56 - //let usernumber='';//usernumber 문자열 선언
57 $('ul').find('a').each(function(index,elem){//ul 태그 아래 a태그를 찾는다. 42 $('ul').find('a').each(function(index,elem){//ul 태그 아래 a태그를 찾는다.
58 username=$(this).find('.name').text().trim();//name클래스를 찾아 공백빼고 텍스트화 43 username=$(this).find('.name').text().trim();//name클래스를 찾아 공백빼고 텍스트화
59 userleague=$(this).find('.league').text().trim();//league클래스를 찾아 공백빼고 텍스트화 44 userleague=$(this).find('.league').text().trim();//league클래스를 찾아 공백빼고 텍스트화
...@@ -77,7 +62,7 @@ request(rtfw1,(error,response,body)=>{//rtfw url 불러오기 ...@@ -77,7 +62,7 @@ request(rtfw1,(error,response,body)=>{//rtfw url 불러오기
77 });//ul a find문 종료 62 });//ul a find문 종료
78 63
79 var profileID=''; 64 var profileID='';
80 - request(rtfw2,(error,response,body)=>{//rtfw2 url 불러오기 65 + request(rtfw2,(error,response,body)=>{//rtfw2 url 불러오기 request 2
81 if(error){throw error};//에러처리 66 if(error){throw error};//에러처리
82 console.log('request2 processing');//테스트용 : request2 실행여부 출력 67 console.log('request2 processing');//테스트용 : request2 실행여부 출력
83 let $ = cheerio.load(body);//rtfw2가 body이다. $로 jquery방식으로 html탐색 68 let $ = cheerio.load(body);//rtfw2가 body이다. $로 jquery방식으로 html탐색
...@@ -91,25 +76,13 @@ request(rtfw1,(error,response,body)=>{//rtfw url 불러오기 ...@@ -91,25 +76,13 @@ request(rtfw1,(error,response,body)=>{//rtfw url 불러오기
91 });//a bnetlink 종료 76 });//a bnetlink 종료
92 //console.log(`${profileID}`);//테스트용 : profileID 출력 77 //console.log(`${profileID}`);//테스트용 : profileID 출력
93 78
94 -var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/" 79 +var match_history_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"//매치히스토리 url 앞부분
95 -var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi" 80 +var match_history_2="/matches?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"//매치히스토리 url 뒷부분
96 -var match_history_url=match_history_1+profileID+match_history_2; 81 +var match_history_url=match_history_1+profileID+match_history_2;//매치히스토리 url 구성
97 -console.log(match_history_url); 82 +console.log(match_history_url);//테스트용 : 매치히스토리 url 출력
98 -request(match_history_url,(error,response,body)=>{ 83 +request(match_history_url,(error,response,body)=>{//match history request request 3-1
99 - if(error){throw error}; 84 + if(error){throw error};//에러처리
100 - console.log('request3-1 processing'); 85 + console.log('request3-1 processing');//테스트용 : request 작동여부 출력
101 - //console.log(body); //테스트용: response body 출력
102 - //JsonParser jsonParser=new JsonParser();
103 - //JsonObject jsonObject=(JsonObject) jsonParser.parse(json);
104 - //JsonObject matches=(JsonObject) jsonObject.get("matches");
105 - //System.out.print(matches.get("map"));
106 -
107 -//MatchHistory matchhistory=new Gson().fromJson(json,MatchHistory.class);
108 -//for(MatchHistory.Matches matches : matchhistory.matches){
109 -// System.out.println(matches.map);
110 -// System.out.println(matches.type);
111 -// System.out.println(matches.decision);
112 -//}
113 86
114 var obj1=JSON.parse(body);//request 결과를 JSON object로 변환 87 var obj1=JSON.parse(body);//request 결과를 JSON object로 변환
115 //console.log(obj.matches [0].map);//테스트용 : 하나에 접근 88 //console.log(obj.matches [0].map);//테스트용 : 하나에 접근
...@@ -118,15 +91,13 @@ $(obj1.matches).each(function(index,match){//body에서 각각의 배열요소 m ...@@ -118,15 +91,13 @@ $(obj1.matches).each(function(index,match){//body에서 각각의 배열요소 m
118 console.log(index+":::",match.decision,match.map);//인덱스와 승패, 맵 표시 91 console.log(index+":::",match.decision,match.map);//인덱스와 승패, 맵 표시
119 };//if 1v1 종료 92 };//if 1v1 종료
120 });//each function 종료 93 });//each function 종료
121 -//var jsonstring=JSON.stringify(body);//json형식의 string으로 변환
122 -//console.log(jsonstring);//테스트용 : jsontext에 바디가 적절히 들어가는지 검사
123 -
124 });//request3-1종료 94 });//request3-1종료
95 +
125 var ladder_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/" 96 var ladder_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"
126 var ladder_2="/ladders?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"; 97 var ladder_2="/ladders?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi";
127 var ladder_url=ladder_1+profileID+ladder_2; 98 var ladder_url=ladder_1+profileID+ladder_2;
128 console.log(ladder_url); 99 console.log(ladder_url);
129 -request(ladder_url,(error,response,body)=>{ 100 +request(ladder_url,(error,response,body)=>{//ladder request request 3-2
130 if(error){throw error}; 101 if(error){throw error};
131 console.log('request3-2 processing'); 102 console.log('request3-2 processing');
132 var obj2=JSON.parse(body);//request 결과를 JSON object로 변환 103 var obj2=JSON.parse(body);//request 결과를 JSON object로 변환
...@@ -134,16 +105,16 @@ request(ladder_url,(error,response,body)=>{ ...@@ -134,16 +105,16 @@ request(ladder_url,(error,response,body)=>{
134 var wins=obj2.currentSeason[1].ladder[0].wins; 105 var wins=obj2.currentSeason[1].ladder[0].wins;
135 var losses=obj2.currentSeason[1].ladder[0].losses; 106 var losses=obj2.currentSeason[1].ladder[0].losses;
136 var winrate=wins/(wins+losses); 107 var winrate=wins/(wins+losses);
137 - console.log(wins); 108 + //console.log(wins);
138 - console.log(losses); 109 + //console.log(losses);
139 - console.log(winrate); 110 + //console.log(winrate);
140 });//request3-2종료 111 });//request3-2종료
141 112
142 var profile_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/"; 113 var profile_1="https://kr.api.blizzard.com/sc2/legacy/profile/3/1/";
143 var profile_2="?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi"; 114 var profile_2="?access_token=US0q3wV6W1fIYZmRnEBbNvUrRHYZhwANIi";
144 var profile_url=profile_1+profileID+profile_2; 115 var profile_url=profile_1+profileID+profile_2;
145 console.log(profile_url); 116 console.log(profile_url);
146 -request(profile_url,(error,response,body)=>{ 117 +request(profile_url,(error,response,body)=>{//profile request request 3-3
147 if(error){throw error}; 118 if(error){throw error};
148 console.log('request3-3 processing'); 119 console.log('request3-3 processing');
149 var obj3=JSON.parse(body);//request 결과를 JSON object로 변환 120 var obj3=JSON.parse(body);//request 결과를 JSON object로 변환
...@@ -153,19 +124,14 @@ request(profile_url,(error,response,body)=>{ ...@@ -153,19 +124,14 @@ request(profile_url,(error,response,body)=>{
153 var terran_level=obj3.swarmLevels.terran.level; 124 var terran_level=obj3.swarmLevels.terran.level;
154 var zerg_level=obj3.swarmLevels.zerg.level; 125 var zerg_level=obj3.swarmLevels.zerg.level;
155 var protoss_level=obj3.swarmLevels.protoss.level; 126 var protoss_level=obj3.swarmLevels.protoss.level;
156 - console.log(terran_level); 127 + //console.log(terran_level);
157 - console.log(zerg_level); 128 + //console.log(zerg_level);
158 - console.log(protoss_level); 129 + //console.log(protoss_level);
159 });//request3-3종료 130 });//request3-3종료
160 131
161 });//request2종료 132 });//request2종료
162 -// }catch(error){
163 -// console.error(error);
164 -// }//try_catch구문 종료
165 -});//request1 종료
166 133
167 -// });//parsing_html 끝 134 +});//request1 종료
168 - //
169 135
170 r.close()//반드시 close를 해줘야 한다.사용이 다 끝난 후에. 136 r.close()//반드시 close를 해줘야 한다.사용이 다 끝난 후에.
171 });//r.question 끝 137 });//r.question 끝
......
1 +<추가 구현 사항>
2 +-rtfw 다음페이지 검색
3 +-rtfw 한글검색 utf8
4 +-리그/region/realm 선택
5 +
6 +<정보>
7 +상대 기세 : 최근 래더 10경기 결과로 추정
8 +//맵별 승률 : 최근 래더 25경기 결과로 승률 50퍼센트가 넘는 맵 추정
9 +종족별 숙련도 : 종족레벨 50 미만일경우 비숙련자
10 +주 종족 :
11 +이번시즌 전체 승률 :
12 +
13 +<빌드추천 기준>
14 +하락세/비숙련자-운영
15 +상승세/숙련자-올인
16 +비등/이외-타이밍
17 +
18 +<프로젝트 설명>
19 +편법 아니고 빠른시간에 제공가능하다는 점 부각