자바스크립트를 이용한 카카오톡 봇 랭크 검색 기능이다.
사실 시작자체도 못하고 있었는데 내용을 아주 잘 정리해주신 분이 계셔 참고했다.
http://blog.naver.com/PostList.nhn?blogId=dt3141592 (네이버 블로그 - Dark Tornado님)
시작 자체도 저분이 만들어주신 앱으로 시작했다.
블로그에 자세한 설명을 해주셔서 따로 적진 않고 간략하게 말하면
1. 봇을 돌릴 기계가 필요하다. (공기계 혹은 Nox와 같은 가상머신도 가능)
2. 카카오톡 계정이 필요하다. (슬랙 봇 개념과 다름)
3. 공기계 혹은 가상 머신에 안드로이드 웨어 앱과 채팅 자동응답 봇 앱 2개를 설치해야 한다.
4. 채팅 자동응답 봇에서 코드를 작성한다.
이다.
맨 처음엔 특정 단어에 반응해 대답하는 것만 해봤다.
그리고 Dark Tornado님 블로그에서 예제를 보고 따라해서 날씨, 실시간 인기 검색어등을 구현했다.
위의 기능은 위 블로그에 잘 설명되어 있으니 필요하신 분들은 가서 보면 되겠다.
이제 만들건 롤 랭크 정보 검색 기능이다.
사실 자바스크립트를 제대로 배워본적도, 지금와선 기억에 남는것도 없어서
코드를 짜긴했지만 잘한건진 모르겠다.
명령어는 대충 /롤 (소환사 아이디) 정도로 생각했다.
처음은 어떻게 보여줄지를 정했다.
대충 이렇게 정했다.
사실 맨 처음엔 랭크가 없을 때를 생각하지 못 해 다 만들고 검색했더니 안나오는 상황도 있었다... (Faker님조차 안나와서 이상했음)
"아이디" 영역도 롤이 검색 시엔 대소문자를 구별하지 않는데 아이디 자체는 대소문자가 있다.
(ex. Abc라는 아이디는 abc로 검색해도 됌)
그래서 /롤 abc라고 명령해도 보여줄 땐 Abc로 보여주기 위해 따로 뺐다. (명령할 때 abc를 빼오면 안 맞으니..)
만드는 방법 자체는 날씨 확인하는 것과 동일했던 것 같다...
검색 사이트는 op.gg를 이용했다..
// 롤 전적 불러오기
function lolTierInfo(pos) {
try {
var data = org.jsoup.Jsoup.connect("https://www.op.gg/summoner/userName="+pos.replace(/ /g, "+")).get();
var name = data.select("span.Name").text();
var solorank = "솔로랭크 - ";
var teamrank = "자유 5:5 랭크 - ";
try {
var solotier = data.select("div.TierRank").text();
var solopoint = data.select("div.TierInfo").text().split("/");
var record = solopoint[1].trim().split(" ");
solorank += solotier;
solorank += "("+solopoint[0].trim()+")\n";
solorank += record[0]+" / "+record[1] +" (승률 "+record[4]+")";
}
catch(e) {
solorank += "Unranked";
}
try {
var teamtier = data.select("div.sub-tier__rank-tier").text();
var teampoint = data.select("div.sub-tier__league-point").text().split("/");
var teamrecord = teampoint[1].trim().split(" ");
teamrank += teamtier;
teamrank += "("+teampoint[0].trim()+")\n";
teamrank += teamrecord[0]+" / "+teamrecord[1] +" (승률 "+data.select("div.sub-tier__gray-text").text().split(" ")[2]+")";
}
catch(e) {
teamrank += "Unranked";
}
var result = "["+name +" 랭크 정보]\n\n"+solorank+"\n\n"+teamrank;
return result;
}
catch(e) {
return null;
}
}
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
msg = msg.trim();
var cmd = msg.split(" ")[0];
var data = msg.replace(cmd+" ","");
if(cmd=="/롤") {
var result = lolTierInfo(data);
if(result == null) {
replier.reply("등록되지 않은 소환사입니다.\n오타를 확인 후 다시 검색해주세요.");
}
else {
replier.reply(result);
}
}
}
결과물