팁과 노하우 게시판

전체보기

모바일 상단 메뉴

본문 페이지

[일반] 로아 API 사용법 part 2 (유물 각인서 가격 긁어오기 + 자동화 + 공유)

수석실장
댓글: 10 개
조회: 13683
추천: 9
2025-02-25 08:47:30
이전 글을 보고 오시면 좋습니다 (https://www.inven.co.kr/board/lostark/4821/104316)

이번 글에서는 구글 앱 스크립트로 유물 각인서 가격을 가져와서 구글 스프레드시트에 저장하고
매크로를 통한 자동화 까지 진행해보겠습니다.
(+심화과정으로 엑셀과 연동하는 법 까지 case1: 스프레드시트 공유, case2: 웹 앱 배포)

지난 글과 비슷하게 API 공식 홈페이지부터 시작해 보겠습니다. (https://developer-lostark.game.onstove.com/)


거래소와 관련된 기능은 API DOCUMENTS -> MARKETS 에서 확인 및 테스트 해 볼 수 있습니다.



첫 번째 항목은 맨 밑의 POST 요청을 보낼 때 필요한 옵션을 조회 할 때 쓰는 기능입니다.
두 번째 항목은 특정 아이템의 정보를 조회 할 때 쓰는 기능입니다. 인게임 거래소에서 시세 확인 버튼을 누르면 뜨는 창의 정보를 알 수 있습니다 (날짜별 평균 거래가, 판매 건수). 검색에 필요한 Item ID는 세 번째 항목의 응답 본문에서 확인이 가능합니다.
세 번째 항목이 거래소 가격을 실시간으로 불러올 수 있는 기능입니다.

거래소 가격을 불러오기 위해 세 번째 POST 항목을 눌러서 Try it out 버튼을 눌러보면 다음과 같은 창이 뜹니다.



음.... 여러 가지 옵션이 있군요



일단 스크롤을 제일 아래로 내려서 Models 쪽을 살펴보겠습니다.


RequestMarketItems 탭의 우측에 Expand Operations를 눌러보면 요청을 보낼 때 필요한 옵션의 목록과 데이터 타입을 확인 할 수 있습니다.

저는 유물 각인서를 검색 할 때 가격이 비싼 순으로 검색을 하고 싶으니
Sort에는 "CURRENT_MIN_PRICE" (현재 최저가)
SortCondition에는 "DESC" (내림차순)
을 넣어주면 되겠네요

나머지 옵션에 들어갈 수 있는 값들은 앞서 말했던 첫번째 GET 항목에서 확인이 가능합니다.
첫번째 GET항목을 눌러서 Try it out -> Excute 순으로 실행해 보시면 하단 Response body에서 필요한 옵션의 종류와 값들을 확인 하실 수 있습니다.

(가독성 고려해서 편집을 해 봤습니다)
유물 각인서를 검색하기 위해서는 다음과 같이 검색 옵션을 설정하면 됩니다.

각인서의 CategoryCode는 40000
CharacterClass와 ItemTier는 필요 없을 것 같고
유물 등급의 ItemGrades는 "유물"
ItemName은 여러 아이템을 모두 조회할 것이기 때문에 옵션에서 제외하겠습니다.
(특정 아이템 이름만 넣으면 해당 아이템만 조회가 가능합니다)
PageNo는 1페이지부터 조회해보도록 하죠.

따라서 다음과 같이 검색 옵션 설정이 완료되었습니다.





실행 해보면 아래와 같이 잘 불러와 지는걸 확인할 수 있습니다.



검색 옵션의 PageNo를 2, 3, 4 등으로 바꿔보면서 실행 해 보시면 순서대로 다음 페이지가 불러와 집니다.


자. 그러면 이제 지난번처럼 챗GPT 님께 구글 앱 스크립트 코드를 작성해달라고 부탁해봅시다.
원하는 기능을 자세히 적을 수록 좋습니다.



그리고 GPT 형님이 알려주신 코드를 앱 스크립트 편집기에 붙여넣어 줍니다. 
(생성되는 코드는 개인별로 다를 수 있습니다)



api 키를 실제 본인의 api 키로 수정해주고, myFunction 안쪽에 gpt 형님이 알려주신 함수를 추가하고 실행을 한 뒤 구글 스프레드시트를 확인해 보면....



저장도 완벽하게 되었습니다.

이제 방금 실행했던 myFunction 함수를 매크로에 등록해서 1분에 한번씩 실행되도록 해 보겠습니다.

앱 스크립트 편집기 화면에서 좌측에 있는 트리거 메뉴로 들어가보면



이런 화면으로 넘어와 집니다. 
우측 하단의 트리거 추가 버튼을 눌러서 아래 사진과 같이 설정해 주신 후 저장 버튼을 누르면.
1분에 한 번씩 스프레드시트가 업데이트 됩니다. 

실행 주기와 트리거 실패 알림 설정은 본인 입맛에 맞게 설정해주시면 됩니다.
(트리거 작동 실패시 구글 메일로 알림이 날아옵니다.)



참고로 좌측의 트리거 메뉴와 실행 메뉴에서는 각각 트리거 관리와 등록된 트리거의 실행 기록 확인도 가능합니다.


(가끔씩 실패하기도 하네요... 실패한 경우를 클릭해 보면 실패 이유도 알 수 있습니다. 일시적인 통신 에러인듯?)

프로그래밍에 익숙하신 분들은 본인 입맛에 맞게 코드를 수정하시거나 
생소하신 분들은 챗 GPT한테 현재 코드와 원하는 수정 내용을 정확하고 자세히 설명하면 잘 수정해 줍니다.
생활 전리품이나 재련 재료 가격도 검색 옵션만 알맞게 수정해 주시면 같은 방법으로 불러올 수 있습니다.
(각 카테고리에 맞는 category code를 먼저 확인하셔야 합니다. 묶음 단위로 거래되는 물품의 경우 응답 본문의 Items 필드 하위의 CurrentMinPrice 필드 값을 BundleCount 필드 값으로 나눠주면 1개당 가격으로 변환 할 수도 있습니다. Id 필드 값을 불러온 다음 해당 Item ID 값으로 날짜별 평균 거래가와 판매 건수를 조회 해 볼 수도 있습니다.)

거래소 말고 경매장 검색도 같은 방법으로 검색이 가능합니다만 검색 옵션이 약간 복잡합니다. 그래도 API 공식 홈페이지에서 이것 저것 시도하시다 보면 각자의 방법을 찾으실 수 있을 겁니다.

검색량이 많아서 분당 검색 횟수(100회) 제한에 걸리시는 분은
응답 헤더에 포함된 정보 중
x-ratelimit-remaining: 92 x-ratelimit-reset: 1740434126
이 두 가지를 활용하면 1분당 검색 한도에 걸리기 전에 한도 초기화 까지 대기하는 로직을 추가하거나
API 키를 추가로 발급받아 번갈아가며 사용하는 기능을 추가할 수도 있습니다. (1인당 5개까지 발급 가능)
(챗 GPT에게 요청해보세요)

각자 원하시는 대로 응용 하시면 되겠습니다.

(추가할 내용으로는 구글 앱 스크립트에서 외부 api 호출시 UrlFetchApp 함수를 사용하는데, 이 함수의 1일 호출 한도가 정해져 있고, 매크로를 통한 스크립트의 실행 시간에도 일 한도가 정해져 있기 때문에 다량의 아이템을 짧은 주기로 검색하고 싶으신 분들은 앱 스크립트 말고 다른 방법을 찾으시는게 좋습니다.)






+심화 과정
여기서부터는 로컬에 있는 엑셀 파일에 구글 시트의 데이터를 공유하는 과정입니다. (친구에게 링크를 알려주면 친구도 엑셀에서 여러분이 만든 구글 시트 데이터를 가져갈 수 있습니다.)
그냥 구글 시트로 사용하실 분들은 패스하셔도 좋습니다.

두 가지 방법이 있는데, 각 방법과 장단점을 먼저 정리해보겠습니다.
두 방법 모두 엑셀에서 구글 시트의 데이터를 불러올 때는 파워 쿼리를 이용합니다. (매우 간단)

1. 구글 시트를 웹에 게시하는 형태로 공유하는 방법
2. 앱 스크립트를 "웹 앱" 으로 배포하는 방법

1번의 장단점은
클릭 몇 번으로 공유가 쉽게 가능하지만
구글 스프레드시트 -> (딜레이 존재) -> 웹에 게시 -> 게시된 데이터 공유
의 과정에서 구글 시트에 수정된 데이터가 반영되기까지 최대 5분의 지연이 발생할 수 있습니다.

2번의 장단점은
스프레드시트 -> 앱 스크립트를 이용하여 데이터 직접 공유
의 과정을 따르기 때문에 지연 없이 구글 시트와 공유된 데이터가 항상 동기화 되어 있지만
추가적인 앱 스크립트 코드 작성이 필요합니다.

각자 본인의 상황에 따라 원하시는 방법을 고르시면 됩니다.
먼저 1번 방법부터 해보겠습니다.

구글 시트 창에서 파일->공유->웹에 게시를 클릭해 줍니다.




위 사진과 같이 설정해주고 게시 버튼을 누르면 끝입니다.
그러면 게시한 웹 페이지를 볼 수 있는 링크를 알려주는데, 해당 링크를 복사해 두고 엑셀로 이동해 보겠습니다.
(복사한 링크로 들어가면 게시된 데이터를 확인할 수도 있습니다.)

엑셀의 상단 데이터 탭 -> 웹 버튼을 눌러서 파워 쿼리 설정을 열고 방금 복사한 링크를 그대로 입력 후 확인 버튼을 누릅니다.




데이터 변환을 클릭해 줍니다.


각자의 데이터 상황에 맞게 열 제거, 행 제거, 첫 행을 머리글로 사용 옵션을 활용해 필요한 데이터만 남도록 가공해 줍니다.


↑가공 전 원본 데이터


↑가공 후 정리된 데이터

데이터 가공이 끝났으면 좌측 상단의 "닫기 및 로드" 버튼을 눌러 시트에 데이터를 입력해주면 끝입니다.
해당 데이터는 표의 형태로 저장됩니다.


파워 쿼리로 불러온 표를 새로 고침 하는 방법은 여러 가지가 있습니다.

수동으로 하기: 
표를 우클릭 후 새로 고침 버튼 클릭
ctrl+alt+F5 단축키로 새로 고침
엑셀 상단 데이터 탭 -> 쿼리 및 연결(모두 새로 고침)

자동으로 하기:

자동 새로 고침 간격은 원하시는 대로 설정하시면 됩니다.

대부분의 분들은 이 정도만 해도 충분할 것으로 생각됩니다만

최신 데이터로 갱신 되기까지 딜레이가 불편하시다면 2번 방법인 앱 스크립트 웹 앱 배포 방식을 사용하셔야 합니다. 딜레이가 얼마나 발생하는지는 뒤에서 비교해 보겠습니다.

웹 앱을 배포하기 전에 챗 GPT 님께 코드 요청을 다시 해 보겠습니다.





해당 코드를 앱 스크립트 편집기에서 기존 작성되어 있는 코드 뒤에 추가해 주고 
저장 후 우측 상단의 배포->새 배포 버튼을 눌러 배포를 진행해 보겠습니다.




배포 유형은 "웹 앱" 으로 골라 주시고, 
액세스 권한이 있는 사용자는 반드시 "모든 사용자" 로 지정해주셔야 합니다. ("나만" 으로 설정시 엑셀에서 접근할 수 없습니다)
배포 버튼으로 배포를 완료하면 웹 앱에 접근할 수 있는 URL을 알려줍니다.
이 주소를 복사 후 주소창에 붙여넣기 했을 때 아래 사진처럼 나오면 성공입니다.
(만약 csv 파일이 다운로드 된다면 doGet 함수의 return 줄에 마지막 부분이 ContentService.MimeType.TEXT로 되어있는지 확인 바랍니다. ContentService.MimeType.CSV로 되어있다면 해당 부분만 수정해주시면 됩니다.)


시간 형식이 맘에 안 들지만 챗 GPT 님께 날짜 형식을 (년-월-일 시:분) 으로 맞춰 달라고 코드 수정 요청을 하면 그만입니다. 코드 수정은 여러분께 숙제로 남기겠습니다.
여기까지 되었으면 엑셀에서 데이터->웹 버튼을 누르고 뜨는 창에 웹 앱의 URL을 입력하고 이전과 같이 일련의 파워 쿼리 과정을 진행해 주시면 엑셀에 데이터 가져오기가 끝납니다.

아래 사진의 왼쪽 테이블은 1번 방법(웹에 게시)으로 구글 시트의 값을 가져온 것이고,
오른쪽 테이블은 2번 방법(웹 앱 배포)으로 가져온 것입니다.
구글 시트는 1분마다 자동으로 업데이트 되고 있지만 동시에 새로 고침 한 두 테이블을 비교해 보시면
1번 방법(웹에 게시)으로 가져온 데이터가 2분 느립니다.
(구글에서 1번 방법의 갱신을 빨리 해 주면 둘 다 최신 데이터일수도 있습니다.)



그러나 한 가지 중요한 사실은 API를 통한 검색은 인게임 거래소or경매장 검색보다 무조건 느리다는 것 입니다.
10겁 0빼기 이벤트 발생시 인게임에서 손크로로 계속 검색돌리는 사람이 있다면 api로 검색 후 구매하는 방법으로는 사람보다 빠르게 살 순 없습니다. 
매크로가 가져가는건 손크로를 돌리는 사람이 없기 때문입니다.
이 점을 인지하시고 편한 방법을 골라서 사용하시면 되겠습니다.

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징

최근 HOT한 콘텐츠

  • 로아
  • 게임
  • IT
  • 유머
  • 연예
AD