Showing
2 changed files
with
60 additions
and
75 deletions
| 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 끝 | ... | ... |
process3.txt
0 → 100644
| 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 | +편법 아니고 빠른시간에 제공가능하다는 점 부각 |
-
Please register or login to post a comment