본문 바로가기

로스트아크/로스트아크 편하게하기

구글 스프레드시트에서 로아 편하게 하기 7탄: 로스트아크 숙제 체크표

반응형

안녕하세요. 원다게입니다.

이번 포스팅은, 구글 스프레드시트로 만든 로아 숙제 체크표 공유입니다.

항상 모든 스프레드시트는 '사본만들기' 후 사용하시기 바랍니다!!

 

사용법을 꼼꼼히 읽어보신 후 사용하세요!!

특히 빨간색 글자는 반드시 반드시 읽기!!!!!

 

우선 화면은 이런식으로 생겼습니다.

 

사용에 필요한 메소드는 모두 구현되어 있으므로, 바로 사용하시면 됩니다만

빠른 속도를 위해 이전과는 다르게 크롤링 방식이 아닌 로아API 방식을 사용했습니다.

때문에 로아 API KEY가 반드시 필요합니다!

 

로아 API KEY 발급 방법은 아래 포스팅을 확인하시면 되겠습니다.

https://giveme100.tistory.com/158

 

[로스트아크 팁] 로스트아크 API 키 발급 받기

로스트아크 API 키를 발급 받는 방법입니다. 1. 인터넷 창에 '로아 API' 를 검색합니다. 저는 구글에 검색했습니다. 네이버든 다음이든 어디든 상관없을 듯 합니다. 2. Lostark OpenAPI Developier Portal 로

giveme100.tistory.com

 

 

여기서 (A)라고 표시 된 부분은 자동입력 부분이고,

숙제를 하면서 손댈 부분은 체크박스 부분입니다.

클리어 한 경우 체크박스 표시 해주면 되겠습니다.

 

일간 초기화를 하고 나면 아래와 같이 화면이 바뀝니다.

 

카오스, 가디언, 일간에포나와 길드 일일출석 체크박스는 모두 초기화되고,

카오스와 가디언의 체크박스 체크 여부에 따라 휴식경험치가 갱신됩니다.

 

체크한 경우 -> 휴식경험치가 2 줄어듭니다.

체크하지 않은 경우 -> 휴식경험치가 1 늘어납니다.

 

따라서,

초기 사본만들기 후, 카오스와 가디언의 휴식경험치는 최초 1회 수동으로 입력해 주시기 바랍니다.

 

 

주간 초기화를 하면, 아래와 같이 주간 컨텐츠가 모두 비워집니다.

 

다시 한번 말씀드리지만, 체크 부분을 제외한 어느 곳도 수동으로 입력할 필요가 없습니다.

 

그러면 의문이 들텐데요,

내 캐릭터 명과 직업 레벨 카오스나 가디언 어디돌지! 길드는 어딘지, 어떻게 적냐!!!!

 

스프레드시트 아래 시트 고르는 부분에 'setting' 여기서 입력합니다.

여기를 가세요.

여기로!

 

 

들어가면 아래와 같이 시커면 화면이 나옵니다!!

여기서 일단 저기 아래 그림 노란글자 보이시죠.

여기다가 로아 API KEY 를 적습니다.

그리고 저 회색 배경 칸에 캐릭터명을 쓰세요!!!

 

다 썼으면 업데이트 버튼을 누르세요!!

그러면 아래처럼 쫙 입력됩니다.

그럼 어떻게 될까요.

숙제 시트에 자동으로 업뎃됩니다!!!!! 정보가!

 

제가 트리거까지 다 설정해놨는데, 사본만들기를 했을 때 트리거까지 같이 될지는 모르겠습니다.

 

이 경우, 매일과 매주 간격으로 트리거를 꼭 설정해주세요. 그래야 자동으로 초기화됨!!!

안되어 있는 경우 트리거 설정방법은 아래 포스팅을 확인하세요.

https://giveme100.tistory.com/170

 

[GAS+SpreedSheet] 구글 앱스 스크립트(GAS) 트리거 설정하는 방법

안녕하세요. 오늘은 구글 앱스 스크립트(Google Apps Script)에서 트리거를 설정하는 방법을 알려드리고자 합니다. 트리거를 설정하면 특정 조건에서 만들어 놓은 함수들을 실행하는 기능인데요, 크

giveme100.tistory.com

 

 

트리거 설정은 아래로 맞추세요.

trigger_weekclear -> 매주 수요일 오전 6~7시 

trigger_dayclear ->  매일 오전 5~6시

init -> 매일 오전 5~6시

 

그럼 세팅 쫙 하시고,

로아 체크표 활용하셔서 즐거운 로아하세요~~~~

 

스프레드 시트 공유 주소는 아래 링크를 따라가세요.

https://docs.google.com/spreadsheets/d/1vgwcpY3LLUiHZc-jy1azcptMOswmwqdxjncAZcwIA58/edit#gid=812920006

 

체크 개발 (공유용)

숙제 캐릭수(A):,13,일간컨텐츠,주간컨텐츠 캐릭터명(A),직업 (A),레벨 (A),카오스,가디언,일간 에포나,길드,길드,군단장 단계 (A),휴식 (A),클,이름 (A),휴식 (A),클,이름,일일 출석,토벌,기여도,혈석 교

docs.google.com

끝!

 

소스코드는 시트 안에도 있으나,

아래 코드 블럭으로도 알려드릴테니 다른데도 써보세요.

(공대 관리 시트에 한번 써보세요!!, 못쓰면 다음 포스팅 기다리시면 제가 만들어서 올립니다.)

 

정보 불러오는 소스

function init(){
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('setting');

  sheet.getRange(2,9).setBackground('#ff0000');

  let date = new Date();
  let apiKey = "bearer "+ sheet.getRange(1,3).getValue();

  let row = 5;
  let cnt_char = sheet.getRange(2,7).getValue();

  cnt_char = cnt_char + row;
  
  let arr_char_name = "B5:B"+cnt_char;
  let char_name = sheet.getRange(arr_char_name).getValues();

  cnt_char = cnt_char - row;

  let arr_profiles;
  let arr_engravings;
  let cnt_engravings;

  for(var i=0; i<cnt_char; i++){
    arr_profiles = get_profiles(apiKey, char_name[i]);

    sheet.getRange(row, 3).setValue(arr_profiles[0]);    
    sheet.getRange(row, 4).setValue(arr_profiles[1]);
    sheet.getRange(row, 5).setValue(arr_profiles[2]);

    arr_engravings = get_engravings(apiKey, char_name[i])

    sheet.getRange(row, 7).setValue(arr_engravings);

    arr_engravings = arr_engravings.replace(/([0-9])/g,"$1\n");

    if(arr_engravings.indexOf("감소")==-1){
      cnt_engravings = arr_engravings.replace(/[^0-9]/g,'');
    }else{
      cnt_engravings = arr_engravings.substring(0,arr_engravings.indexOf("감소")).replace(/[^0-9]/g,'');
    }
    
    sheet.getRange(row, 6).setValue(cnt_engravings);
  
    row++;
  }

  sheet.getRange(1,9).setValue("UPDATE: " + date.toLocaleDateString());
  
  sheet.getRange(2,9).setBackground('#000000');

}


function get_profiles(apiKey, name){

  let options = {'method': 'GET', 
  'muteHttpExceptions': true, 
  'Content-Type': 'text/html',
  'headers' : {
    'accept':'application/json',
    'authorization': apiKey},
  };

  let response = UrlFetchApp.fetch("https://developer-lostark.game.onstove.com/armories/characters/"+name+"/profiles", options);

    response = JSON.parse(response.getContentText());
   
    return [response.ItemMaxLevel, response.CharacterClassName, response.GuildName]
}


function get_engravings(apiKey, name){
 
  let options = {'method': 'GET', 
  'muteHttpExceptions': true, 
  'Content-Type': 'text/html',
  'headers' : {
    'accept':'application/json',
    'authorization': apiKey},
  };

  let response = UrlFetchApp.fetch("https://developer-lostark.game.onstove.com/armories/characters/"+name+"/engravings", options);

  response = JSON.parse(response.getContentText());

  let res = "";  

    for(let i=0; i<response.Effects.length; i++){
      res = res + response.Effects[i].Name;
      if(i - response.Effects.length != -1){
        res = res + "\n"
      }
    }
    
    return res;
}

 

 

트리거 소스 코드

//일일 TRIGGER는 이 메소드를 초가
function trigger_dayclear() {
  
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('숙제');
  
  var startRow = 4;    
  var endRow = 4 + sheet.getRange(1,3).getValue()-1;

  var d_epona = 10;    
  var d_check = 12;    
  var chaos = 5;      
  var chaosFg = 6;   
  var gardian = 8;   
  var gardianFg = 9; 

  var cnt;
  
  for(var i=startRow; i<=endRow; i++){
    sheet.getRange(i,d_epona).setValue("");
    sheet.getRange(i,d_check).setValue("");
    }

  for(var i=startRow; i<=endRow; i++){
    if(sheet.getRange(i,chaosFg).getValue()==1){
      sheet.getRange(i,chaosFg).setValue("");
      cnt = sheet.getRange(i,chaos).getValue();
      cnt = cnt-2;
      if(cnt<0) cnt=0;
      sheet.getRange(i,chaos).setValue(cnt);
    }else{
      cnt = sheet.getRange(i,chaos).getValue();
      cnt++;
      if(cnt>=5) cnt=5;
      sheet.getRange(i,chaos).setValue(cnt);
    }
  }

  for(var i=startRow; i<=endRow; i++){
    if(sheet.getRange(i,gardianFg).getValue()==1){
      sheet.getRange(i,gardianFg).setValue("");
      cnt = sheet.getRange(i,gardian).getValue();
      cnt = cnt-2;
      if(cnt<0) cnt=0;
      sheet.getRange(i,gardian).setValue(cnt);
    }else{
      cnt = sheet.getRange(i,gardian).getValue();
      cnt++;
      if(cnt>=5) cnt=5;
      sheet.getRange(i,gardian).setValue(cnt);
    }
  }
  
};


//주간 TRIGGER는 이 메소드를 추가
function trigger_weekclear() {

  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('숙제');
  
  var startRow = 4;    
  var endRow = 4 + sheet.getRange(1,3).getValue()-1;

  var arr = [13, 14, 15, 16,17,18,19,20,21,22,23,24]; 

  
  for(var i=startRow; i<=endRow; i++){
    for(var j=0; j<arr.length; j++){
      sheet.getRange(i,arr[j]).setValue("");
    }
  }
};

 

예전 코드 재활용하다보니,

코드에 let과 var가 혼용되어있는데, 

큰 문제는 없고 무엇보다 고치기 귀찮으니 그냥 올립니다!!!

 

그럼 즐로아 하세요.

모르시는거 있으시면 댓글주시구요~

반응형