[토이 프로젝트] 자동 갱신 게임 명부 제작(0) - 구글 시트 생성

chaejm55·2022년 3월 28일
0

0. 프로젝트를 시작한 계기와 목적

매일 자동 갱신 되는 게임(메이플) 명부를 만들어 보고 싶어 이 프로젝트를 시작하게 되었습니다.
간단히 캐릭터 이름 등의 정보만 제공할 수도 있으나, 그정도는 쉽게 알 수 있는 것입니다. 따라서 그 캐릭터에 대한 세부 정보 및 매일 매일 최신화된 정보를 제공하기 위하여 이 프로젝트를 시작하였습니다.

여기서 사용되는 캐릭터명 및 데이터는 정보 보호를 위하여 실제 명부와 관계 없는 데이터입니다.

1. 구글 스프레드 시트 생성

먼저 명부로 사용할 시트를 생성했습니다.

월드별로 나누었으며 순서는 maple.gg의 월드 인구 통계 순서입니다.

2. 내장 함수 이용

세부 정보를 가져오기 위한 방법으로 두 가지 정도가 있는데, 간단한 방법인 스크래핑을 사용하겠습니다. 메이플 공식 홈페이지와 메이플 지지에서 정보를 가져올 수 있는데 공식홈페이지는 레벨, 유니온, 무릉 등의 정보가 따로 나누어져있어서 한번에 정보를 얻을 수 있는 메이플 지지를 사용하겠습니다.
스프레드시트 내장함수인 IMPORTXML을 사용하여 정보를 얻어오겠습니다.

IMPORTXML로 정보 가져오기

IMPORTXML을 각 셀에 하나하나 입력할 수도 있으나 그렇게 하면 한 캐릭터당 요청수가 굉장히 커지게 되어 속도도 느리고 금방 제한에 걸리게 됩니다. 따라서 CONCATENATE를 사용해 한번에 캐릭터 세부정보(레벨, 직업, 길드, 무릉, 유니온)를 받아오도록 했습니다.
IMPORTXML에 사용되는 XPath는 크롬에서 개발자 도구를 이용하여 복사하였습니다.

=TRANSPOSE(IMPORTXML(CONCATENATE("https://maple.gg/u/", A3) ,"//*[@id='character-card']/div/ul[1]/li[3]/span | //*[@id='character-card']/div/ul[1]/li[5]/span | //*[@id='character-card']/div/div[2]/span | //*[@id='character-card']/div/ul[2]/li[1]/span | //*[@id='character-card']/div/ul[2]/li[2]/small"))
  • TRANSPOSE(): 세로(열) 방향으로 입력되는 IMPORTXML의 데이터를 가로 방향(행)으로 바꾸어 주는 함수입니다.
  • IMPORTXML(): XPath를 사용하여 웹 스크래핑을 하는 내장함수입니다. 링크에 좀 더 자세한 설명이 있습니다.
  • CONCATENATE(): 두개의 문자열을 합치는 기능을 합니다. 여기서는 각 캐릭터명으로 메이플지지 검색을 하기 위한 url 생성 용도로 사용 되었습니다.

문제점

❗ 캐릭터 수가 많아질수록 요청 개수가 많아져 속도가 느려지고 금방 IMPORTXML 요청 제한에 걸리게 되는 문제가 발생했습니다.

해결 방안

IMPORTXML의 주기를 따로 설정하는 등의 방법이 있습니다.
하지만 메이플 랭킹정보 업데이트는 새벽 3~4시 사이에 한번만 이루어지기 때문에 apps script와 트리거를 사용하여 하루에 한번만 갱신하는게 효과적으로 보입니다.
✅ 따라서 apps script로 메이플지지를 스크래핑하는 방법을 사용하여 다음 포스팅을 하겠습니다.

3. Reference

Google 스프레드시트 함수 목록
profile
여러가지를 시도하는 학생입니다

0개의 댓글