본문 바로가기

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

구글 스프레드시트에서 로아 편하게 하기 2탄: 거래소 가격 긁어오기

반응형

거래소 긁어오기를로아 API를 사용해서 수정했습니다.자세한 코드는 정리되는대로 다시 작성하겠습니다.

스프레드시트 주소는 아래 확인하세요~

 

https://giveme100.tistory.com/130

 

구글 스프레드시트에서 로아 편하게 하기 6탄: 로아API 사용해서 거래소 가격 긁어오기

안녕하세요. 아직도 로아를 열심히 즐기고 있는 원다게입니다. 작년에, 로아 공홈에서 거래소 가격을 크롤링해서 긁어오는 프로그램을 만들고 공유했었는데요, https://giveme100.tistory.com/3 구글 스

giveme100.tistory.com

 

 

 

 

 

안녕하세요.

로스트아크를 즐기고 있는 카제로스서버 원래다른게임을하려고했다 입니다.

 

오늘은, 이전 1탄에서 언급했던 거래소 금액을 긁어오는 방법을 공유하고자 합니다.

 

이전 1탄(https://giveme100.tistory.com/2)에서는 단일 품목의 금액을 긁어오는 코드를 만들어 보았습니다.

 

1탄에서 만들었던 함수

 

하지만 1탄의 코드를 보면 2가지 단점이 바로 보이는데요,

 

첫 번째.

하나하나 함수마다 한번씩 서버에 접근하여 데이터를 긁어오게 되므로, 다량의 물품을 등록할 경우 상당한 렉을 유발하게 됩니다.

 

두 번째.

물품 가격을 갱신하기가 상당히 번거롭습니다.

엑셀 내 함수로 표현되다 보니, 시트가 새로 열릴때 갱신되며 수동적으로 갱신하기 위해서는 해당함수를 지웠다가 다시 입력해줘야 합니다.

(DELETE 후 CTRL+Z 도 있습니다만..)

 

그래서 이번에 소개드릴 코드를 작성하게 되었는데요.

 

 

필요한 품목을 통째로 긁어오는 함수입니다!!!

속도가 상당히 빨라졌고... 갱신 버튼을 통해 수동 갱신이 가능합니다!!

 

다만 출력이 되는 위치(ROW/COLUMN) 지정 등이 들어가게 되면 스크립트 만들기가 귀찮아지므로... 하드코딩으로 위치를 지정했습니다.

(우선 저만 쓰기용으로 만들었기때문에.....)

 

 

우선 화면은 아래와 같이 표시됩니다.

 

각 '갱신'버튼을 누르면 아래 목록이 갱신되는 방식입니다.

 

로스트아크 공식 홈페이지 '거래소'에서 데이터를 크롤링하는 방식입니다.

 

 

위 스크립트로 금액을 추출한 후 활용하면 되겠죠...

 

예를들면,

회복약, 중급 오레하 융화 재료 같은 물건을 만들면 얼마가 들지 계산하는 서식을 만들수도 있을겁니다.

중급 오레하는 1편에서 소개드린 함수 'get_market_chip()'을 활용하면 되겠죠??

 

 

 

아래는 해당 스프레드시트에 대한 공유URL 입니다.

https://docs.google.com/spreadsheets/d/15m2rw0unU-nxQBz7xQ-BzjLk-YyVZdZ8L9ofy-lCSMw/edit?usp=sharing 

 

로스트아크-가격불러오기(2)

시트1 * 생활재료 (data_market_living),* 강화재료(data_market_smelt),단일검색방법 = get_market_chip("물품") 사용 품목,등급,어제,최근,최저,품목,등급,어제,최근,최저,ex> =get_market_chip("수호석") 들꽃,0,71.8,68,68,

docs.google.com

 

 

위 스프레드시트는 간단하게 활용하실 수 있도록

제가 1탄, 2탄에서 만들었던 코드를 라이브러리 형태로 넣어놓았습니다.

 

훨씬 쉽고 편하게 활용하실 수 있겠죠...

본인이 사용하고 있던 스프레드시트가 있다면 라이브러리만 당겨다가 쓰시면 될겁니다.

 

 

 

위 제작에 들어간 코드는 아래를 참고하세요.

function data_market_living(start){

  var print_column = 1;
  var last_row = 3;
  var start=1;

  var pagecnt = 3;

  var url = "";
  var url1 = "https://lostark.game.onstove.com/Market/List_v2?firstCategory=90000&secondCategory=0&characterClass=&tier=0&grade=99&itemName=&pageNo=";
  var url2 = "&isInit=false&sortType=1";
  
  var txt1 = "#tbodyItemList > tr:nth-child(";
  var txt2 = ") > td:nth-child(";
  var txt3_name = ") > div > span.name";
  var txt3_grade = ") > div";
  var txt3_etc = ") > div > em";

  var sheet = SpreadsheetApp.getActive().getActiveSheet();

  url = url1 + j + url2;
  var option = {'method': 'GET', 'muteHttpExceptions': true};
  var response = UrlFetchApp.fetch(url, option);
  var html = response.getContentText('UTF-8');
  var load_data = Cheerio.load(html);

  for(var j=1; j<=pagecnt; j++){

    url = url1 + j + url2;
    
    response = UrlFetchApp.fetch(url, option);
    html = response.getContentText('UTF-8');
    load_data = Cheerio.load(html);

    for(var i=1; i<=10; i++){
      sheet.getRange(last_row,start).setValue(load_data(txt1 + i + txt2 + "1" + txt3_name).text());
      sheet.getRange(last_row,start+1).setValue(load_data(txt1 + i + txt2 + "1" + txt3_grade).attr("data-grade"));
      sheet.getRange(last_row,start+2).setValue(load_data(txt1 + i + txt2 + "2" + txt3_etc).text());
      sheet.getRange(last_row,start+3).setValue(load_data(txt1 + i + txt2 + "3" + txt3_etc).text());
      sheet.getRange(last_row,start+4).setValue(load_data(txt1 + i + txt2 + "4" + txt3_etc).text());
      last_row++;
    }
  }
}


function data_market_smelt(start){
  var print_column = 1;
  var last_row = 3;
  var start=7;

  var pagecnt = 5;

  var url = "";
  var url1 = "https://lostark.game.onstove.com/Market/List_v2?firstCategory=50000&secondCategory=0&characterClass=&tier=0&grade=99&itemName=&pageNo=";
  var url2 = "&isInit=false&sortType=1";
  
  var txt1 = "#tbodyItemList > tr:nth-child(";
  var txt2 = ") > td:nth-child(";
  var txt3_name = ") > div > span.name";
  var txt3_grade = ") > div";
  var txt3_etc = ") > div > em";

  var sheet = SpreadsheetApp.getActive().getActiveSheet();

  url = url1 + j + url2;

  var option = {'method': 'GET', 'muteHttpExceptions': true};
  var response = UrlFetchApp.fetch(url, option);
  var html = response.getContentText('UTF-8');
  var load_data = Cheerio.load(html);

  for(var j=1; j<=pagecnt; j++){
       
    if(j>=2){
      url = url1 + j + url2;
      
      response = UrlFetchApp.fetch(url, option);
      html = response.getContentText('UTF-8');
      load_data = Cheerio.load(html);
    }

    for(var i=1; i<=10; i++){
      sheet.getRange(last_row,start).setValue(load_data(txt1 + i + txt2 + "1" + txt3_name).text());
      sheet.getRange(last_row,start+1).setValue(load_data(txt1 + i + txt2 + "1" + txt3_grade).attr("data-grade"));
      sheet.getRange(last_row,start+2).setValue(load_data(txt1 + i + txt2 + "2" + txt3_etc).text());
      sheet.getRange(last_row,start+3).setValue(load_data(txt1 + i + txt2 + "3" + txt3_etc).text());
      sheet.getRange(last_row,start+4).setValue(load_data(txt1 + i + txt2 + "4" + txt3_etc).text());
      last_row++;
    }
  }
}

 

 

그럼, 즐로아 하시기 바랍니다.

반응형