TFT 데이터 분석- API로 데이터 추출하기

Jaehyun_onelion·2023년 3월 17일
0

Side Project - TFT

목록 보기
3/10
post-thumbnail

저번 포스트에서 라이엇 게임즈에서 제공하는 TFT API에 대해 살펴보았다. 이번 포스트에서는 API에서 실제로 데이터를 추출해보자.

1. 데이터 추출 메커니즘

TFT API에서 데이터를 추출하는 방법은 다음과 같다.

각각의 단계를 python 코드로 확인해보자.

2. 데이터 추출 with python

0) 들어가기 전에

라이엇 디벨로퍼에서 제공하는 기본 API-key는 사용에 제한사항이 존재한다.

1초에 최대 20 requests, 2분에 최대 100 requests만 가능하다.

해당 시간 내에 더 많은 requests를 요구하게 되면 해당 API-key는 잠시동안 정지한다. 이 점을 유의하여 코드를 작성했다.

마지막으로 해당 코드들을 싹 정리하여 class로 만든 코드는 다음 사이트에서 확인할 수 있다.

Github-project TFT

1) import library

데이터 추출을 위해서 다음의 library가 필요하다.

import numpy as np
import pandas as pd
import requests
import time
  • numpy : 수학 계산 전용 library
  • pandas : Dataframe 관련 library
  • requests : 인터넷으로부터 데이터를 추출해오는 library, API로부터 추출할 때 해당 library를 사용한다.
  • time : 시간 library, 시간 측정에 사용

2) API-key 지정하기

TFT API를 사용하기 위해서는 API-key가 필요하다. 해당 key는 riot developer에서 얻을 수 있다.


해당 API키를 지정해주자.

또한, request에 필요한 argument가 존재하는데, 이를 request header를 통해 지정해주었다.
request_header의 'X-Riot-Token' 부분에 api-key를 지정해주면 된다.

마지막으로 base_url은 모든 api 추출 시 작성하게 되는 값이다. base_url에 추가적으로 string을 추가해 원하는 api를 사용할 수 있다.

api_key = '************************************'

request_header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
    "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "https://developer.riotgames.com",
    "X-Riot-Token": api_key
    }

base_url = "https://kr.api.riotgames.com/tft/"

3) 랭크별 유저 찾기

(1) 챌린저, 그랜드마스터, 마스터 유저 찾기

TFT-LEAGUE-V1에 존재하는 challenger, grandmaster, master api를 통해 데이터를 불러올 수 있다.

challenger : league/v1/challenger

grandmaster : league/v1/grandmaster

master : league/v1/master

해당 값을 base_url 뒤부분에 추가한 뒤, request를 이용하면 데이터를 추출할 수 있다.

# challenger

challenger_url = base_url + 'league/v1/challenger'

challenger = requests.get(challenger_url, headers = request_header).json()

# grandmaster

grandmaster_url = base_url + 'league/v1/grandmaster'

grandmaster = requests.get(grandmaster_url, headers = request_header).json()

# master

master_url = base_url + 'league/v1/master'

master = requests.get(master_url, headers = request_header).json()

3개의 dictionary 중 challenger dictionary를 데이터프레임으로 만들면 다음과 같다.

pd.DataFrame(challenger)

여기서 집중적으로 보아야할 것은 entries이므로 entries로 만든 데이터프레임을 challenger_df로 지정해주었다.

challenger_df = pd.DataFrame(challenger['entries'])

challenger_df

마찬가지로 master와 grandmaster를 이용해서 master_df, grandmaster_df로 지정해주었다.


grandmaster_df = pd.DataFrame(grandmaster_df['entries']

master_df = pd.DataFrame(master_df['entries']

(2) 다이아 이하 랭크 유저 찾기

다이아 이하 유저의 경우 다음 api 코드를 통해 구할 수 있다.

/tft/league/v1/entries/{tier}/{division}?page={number}

여기서 tier와 division, number를 지정해주면 된다.

# diamond 4 1page 유저 찾기

dia1_page1_url = base_url + 'league/v1/entries/DIAMOND/IV?page={1}'

dia1_page1 = requests.get(dia1_page1_url, headers = request_header).json()

dia1_page1_df = pd.DataFrame(dia1_page1)

4) 유저 PUUID 추출하기

TFT-SUMMONER-V1를 통해 원하는 유저의 PUUID를 추출할 수 있다.
예시로 필자의 아이디인 참새열두마리 데이터 정보를 다음과 같이 추출할 수 있다.


id_url = base_url + "summoner/v1/summoners/by-name/참새열두마리"

my_id = requests.get(id_url, headers = request_header).json()

my_id

여기서 PUUID를 이용하여 필자가 플레이한 게임을 확인할 수 있다.

5) 유저가 플레이한 game id 추출하기

다음 코드를 이용하여 game id를 추출할 수 있다. 한국 게임의 경우 Asia.api.riotgames.com으로 사용해야 하므로 이를 game_url에 사용해주었다.

/tft/match/v1/matches/by-puuid/{puuid}/ids

puu_id = my_id['puuid']
game_url = "https://Asia.api.riotgames.com/tft/" + f'match/v1/matches/by-puuid/{puu_id}/ids?count=20'

game_id = requests.get(game_url, headers = request_header).json()

game_id

6) Game id 이용, game 데이터 추출하기

5)에서 얻은 game id 중 첫 번째 game id를 추출해보자.
다음 코드를 이용하여 추출할 수 있다.

match/v1/matches/game_id

first_game_id = game_id[0]

game_result_url = "https://Asia.api.riotgames.com/tft/" + f"match/v1/matches/{first_game_id}"

game_result = requests.get(game_result_url, headers=request_header).json()

game_result

결과가 엄청 복잡하다. 해당 dictionary의 info key에 속하는 item을 dataframe으로 만들면 다음을 얻을 수 있다.

game_result_df = pd.DataFrame(game_result['info'])

해당 dataframe의 각 row는 해당 게임을 한 유저를 뜻하고, participants column에 해당 유저의 게임 플레이 정보를 뜻한다. participants를 따로 뽑아 dataframe을 만들어보자

participants = pd.DataFrame(game_result['info']['participants'])

participants

여기서 trais와 units를 확인해주어야 한다. 첫번째 유저의 traits를 확인해보자

first_user_trait = pd.DataFrame(participants.loc[0, 'traits'])

first_user_trait

첫번째 유저의 unit도 확인할 수 있다.

first_user_unit = pd.DataFrame(participants.loc[0, 'units'])

first_user_unit

이렇게 API로부터 TFT 데이터를 얻을 수 있다.

다음 포스트에서는 character id와 item, augment를 한글로 변경하는 방법에 대해 다룰 예정이다.

profile
데이터 분석가 새싹

0개의 댓글