본문 바로가기

리그오브레전드/리그오브레전드 데이터 분석

[리그오브레전드 데이터 분석] 리그오브레전드 API 탐색 - 2

320x100

API들을 대충 살펴보았으니

이제 실제로 분석이 가능할지? API를 다룰 수 있을지

내 ID로 했던 랭겜에서 분석에 쓸만한 정보들을 가져와보자.

import requests
import pandas as pd
from pandas.io.json import json_normalize
import json
import time

api_key='RGAPI-2c6804dd-3f78-4975-b3a1-62bbbc4a1f77' #매일 API 갱신해야함
REGION_SET = 'kr'
my_summoner_name='외 7' #내 롤 닉네임
request_header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 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"
    }
summoner_api = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/'+my_summoner_name+\
    '?api_key=RGAPI-7680e063-2c02-45b2-aa24-9c3eef0fcf14&api_key='+ api_key

r = requests.get(summoner_api,headers=request_header) #내 롤 닉네임 정보 호출
pd.DataFrame(r.json(),index=[0]).T

내 계정 정보를 뽑는 것이 가장 먼저다.

저번에 알아봤듯이 게임 정보를 불러오려면 가장 기본적으로 필요한 정보는 게임 ID이다.

근데 여기서 필요한 게임 ID는 내 닉네임이 아닌 계정 고유 ID이다.

생각해보면 닉네임은 수시로 바꿀 수 있기 때문에 역시 계정별 고유 ID로 검색을 해야하겠지.

fow나 opgg 처럼 닉네임으로 검색할 수 없다.

바꿔생각하면 fow나 opgg에 닉네임을 검색해서 정보를 찾을 때는

fow에서 내 닉네임을 입력받고, API에서 내 계정 ID를 가져오고, 저장된 DB에서 그 계정이 포함된 게임 정보를 불러올 것 같다.

 

accountid와 puuid 두 가지가 있는데, 게임 검색에 필요한 ID는 puuid이다.

두 개의 차이는 모르겠지만 둘 다 고유값으로 보여진다.

 

puuid=r.json()['puuid']

request_header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 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": "RGAPI-2c6804dd-3f78-4975-b3a1-62bbbc4a1f77"
}
summoner_api = 'https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/'\
        + puuid + '/ids?'\
        +'type=ranked&start=0&count=20&' + api_key # 랭크게임만, 최근 20경기

r = requests.get(summoner_api,headers=request_header)
r.json()

puuid만 추출한 뒤 저장해두고

게임을 불러오는 API 코드에 추가해주면 이렇게 최근 랭크 게임 20경기의 게임 ID가 추출된다.

저번에 알아봤듯이 최대 100개까지만 가능한데 일단 20게임만 뽑아봤다.

 

game_id=r.json()[0] #최근 20게임 중 가장 최근 1게임

request_header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 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": "RGAPI-2c6804dd-3f78-4975-b3a1-62bbbc4a1f77"
}
summoner_api = 'https://asia.api.riotgames.com/lol/match/v5/matches/' + game_id

r = requests.get(summoner_api,headers=request_header)
df=pd.DataFrame(r.json())
df

20개의 랭크 게임 리스트 중 가장 최근 게임 정보를 하나 불러왔다.

아직까지 세부적인 게임 정보는 파악하기 힘드니 좀 더 뜯어봐야겠다.

 

pd.DataFrame(df['info']['participants'])

이제야 좀 구체적인 내용이 보인다.

어시, 바론킬, 현상금, 레벨, 챔프명 등

보통 fow나 opgg에서 확인할 수 있는 게임 정보, 그 이상이 나온다.

 

fow 확인결과, 리스트 가장 앞에 있던 게임 id는 역시 가장 최근 게임이 맞았다.

그리고 10명의 참가자로 구성된 10개의 row는 순서대로 blue팀과 red팀의 라인 순서로 정렬이 되어있었다.

정확한 원리는 모르겠지만 아마 게임 라인전 초반 단계에서 라인에서 머무른 시간, 정글 아이템, 서폿 아이템 등을 고려해서 라인을 알아서 분류하여 게임을 저장한 것 같았다.

 

2019 시즌에 잠시 라인별 랭크를 따로 매겼던 적이 있었는데, 이 때 악용하는 사람이 많았어서 제도는 결국 폐지됐었다.

질 것 같으면 다른 라인 아이템을 사거나 특정 라인에 시간을 보내면서 게임을 포기해버리면

자신의 주 포지션 점수 대신 다른 포지션 점수가 깎이게 되었기 때문이다.

게임이 끝나면 바로 해당 포지션 점수가 깎였으므로, 핵심은 '게임 진행 중' 포지션이 분류되었다는 거다.   

어쨌든 이렇게 포지션은 분류하는 시스템은 계속 남아서 DB에 라인별 순서대로 쌓이고 있었던 것 같다.

 

지금까지 수집한 정보는 게임이 끝난 시점의 정보다.

몇 킬 몇 뎃 몇 어시였고, 바론을 몇 번 먹었고, 최종 아이템은 무엇이고, 총 몇의 데미지를 주고 받았는지 이런 식이다.

 

지금도 많은 정보가 담겨있지만, 게임 과정에 대한 정보는 없다.

게임 과정을 함께 들여다봐야 더 세밀한 분석이 가능할 것 같다.

그건 다른 API에 담겨있었는데, 다음에 계속 알아보자.

반응형