[우마무스메 프리티 더비] 주간 팀 레이스 탑 100 통계 자동화 구글 시트

바쁘신 분들은 아래 구글 스프레드시트 링크에서 확인하시면 됩니다.

우마무스메 프리티 더비 주간 팀 레이스 탑 100 통계 구글 스프레드시트 링크

아래 글에는 해당 프로젝트를 시작하게 된 동기, 개발 과정이 잡다하게 쓰여있습니다.

2022년 하반기의 나는 크게 우마무스메, 코딩 딱 두 가지로 양분하여 설명할 수 있다.

그 두 가지가 모두 합쳐진 것이 바로 2023년 첫 포스팅하는 이 글.

우마무스메에 존재하는 PVP 콘텐츠는 두 가지다.

챔피언스 미팅, 그리고 팀 레이스.

챔피언스 미팅은 오늘 다룰 내용이 아니니 일단 넘어가고,

팀레이스는 쉽게 말해 잘 키운 캐릭터 싸움 붙이는 것.

여느 모바일 게임에서도 비슷한 PVP 콘텐츠를 쉽게 찾아볼 수 있다.

고등학생 때 참 많이 했던 모바일 게임 삼국지디펜스의 PVP 콘텐츠 장수대전 사진.

사진 출처: 구글 플레이스토어 '삼국지디펜스 : B'

결국 이런 콘텐츠의 핵심은 딱 두 가지다.

캐릭터에 돈과 시간을 갈아 넣어 강하게 만들고, 그렇게 만든 좋은 캐릭터들로 팀을 조합해야 한다는 것.

사람마다 쓸 수 있는 돈과 시간이 다르니 캐릭터 스펙은 어찌할 수 없더라도, 조합은 랭커의 조합을 따라 하기만 하면 그만이다.

그래서 랭커들이 많이 사용하는 조합을 따라 하려고 했는데, 랭커들의 조합 통계를 찾기가 어려웠다.

그래서 내가 직접 만들어보기로 했다.

직접 우마무스메 API를 가져다 쓰면 좋겠지만, 찾을 수가 없었다.

우마무스메 인벤에서 팀 레이스 TOP 100 팀 편성 데이터를 볼 수 있어, 그걸 가져다 쓰기로 했다.

그나저나 인벤은 어떻게 데이터를 받아오는 건지 궁금하다.

인벤 팀 레이스 랭킹

사진 출처

언어는 간편한 파이썬을 선택했다.

웹 사이트 데이터를 받아와야 하니 관련 라이브러리인 requests, bs4를 사용했다.

테스트 과정에서 경과를 시각화해서 보기 위해 tqdm 사용하고,

서버에 올려놓고 프로그램 돌려서 매주 구글 스프레드시트에 자동으로 기록하기 위해 gspread와 oauth2client를 사용했다.

관련하여 참고한 문서 링크를 아래 첨부한다.

gspread Docs 링크

구글 스프레드시트 API Docs 링크

[Python] python으로 구글 스프레드 시트에 작성하기

구글 스프레드시트를 쓸지, DB에 저장해놓고 인벤처럼 웹상에 띄울까 꽤나 고민을 했다.

가장 빠르게 구현할 수 있을 것 같은 쪽으로 선택했는데, 이제 와서 생각해 보니 잘한 선택인 듯.

코드 자체는 단순하다.

거리, 적성별 우마무스메의 수를 스크래핑해서 딕셔너리 형태로 저장하고, 이를 보기 좋게 구글 스프레드시트에 기록한다.

다만 파이어스토어 저장하고 웹으로 구현하다가 도중에 구글 스프레드시트 구현으로 바꾼 것이다 보니 시간이 좀 걸렸다.

구글 스프레드시트 관련 라이브러리를 처음 써본 것도 한몫했다.

배포는 구름 IDE(링크) 컨테이너 '항상 켜두기' 기능을 이용했다.

자동화는 크론탭을 이용해서 매주 특정 시간에 구글 스프레드시트에 데이터를 기록하도록 예약해 주면 된다.

다음에는 깃허브 액션 이용해 봐야겠다.

어쨌거나 이렇게 해서 나온 결과물.

팀 레이스 탑 100 통계 구글 스프레드시트

링크

나름 괜찮게 나왔다.

링크는 아래에.

우마무스메 프리티 더비 주간 팀 레이스 탑 100 통계 구글 스프레드시트 링크

게임 유저가 많은 커뮤니티에 공유하면 좋을 것 같아, 디시에 난생처음 가입해서 글 써봤다.

https://gall.dcinside.com/mgallery/board/view?id=umamusu&no=1417939

코드는 아직 정리를 못해서 깃허브에 안 올렸다.

스프레드시트 배경색 넣는 과정에서 컬러 코드를 0과 1 사이 실숫값으로 변환해야 했는데, 꽤나 귀찮은 일이었다.

다행히 HEX 코드 두 자리를 퍼센트 값으로 변환해 주는 사이트(링크)를 찾아서 고생을 덜었다.

HEX 코드 여섯 자리를 입력하면 3개의 값을 아래와 같은 형태로 변환해 주는 서비스가 있으면 좋을 듯.

나중에 직접 만들어볼까 생각 중이다.

끝!