라이엇 api 서버에서 랭크 게임 데이터 추출하기

JoonQpa·2022년 5월 22일
3

개인프로젝트

목록 보기
4/6
post-thumbnail

스파르타코딩클럽 내일배움단 웹 개발 종합반을 진행한지 어느덧 한달이 지나갔다.

그동안 많이 늘었나? 싶으면서도 자신이 없었는데

다가온 주말을 기회로 키보드 청소(다시는 하기 싫다.),

컴퓨터 청소를 포함해서 집안 대청소도 하고,

그동안 하고싶었던 롤 API서버를 이용한 데이터 추출 작업을 해봤다 :)


데이터를 처리하면서 내 머리 속에서 굴러다닌 로직들을 잃고 싶지 않아서 글을 써야겠다.


📌 API Key


롤 api서버를 이용하려면 가장먼저 API Key를 부여받아야 한다.

https://developer.riotgames.com/

로그인만하면 쉽게 key를 부여받을 수 있지만 Rate limit가 상당히 짜다.


📌 API 요청 주소 찾는 법


Api서버를 이용하기 위해서 어떤식으로 데이터가 구성되어 있는지 살펴봐야한다.

다른게임에 비해 엄청나게 정리가 잘되어 있어서 편하게 이용할 수 있었다.

우측 상단 프로필 클릭 -> APPS -> 원하는 탭 클릭 후 정보 입력

매치 탭에서 미리 알아 둔 puuid를 입력하면 URL주소를 받을 수 있다.

이렇게해서 알아낸 주소에서 내가 원하는 값들을 바꿔 넣으면서 데이터를 요청하면 된다.


📌 랭크 게임 데이터 추출


유저의 최근 랭크 10경기의 매치아이디 추출

2:2 솔로 랭크의 queue 값은 420이다.

다른 종류의 매치의 queue값은 이곳에서 살펴 볼 수 있다.
https://static.developer.riotgames.com/docs/lol/queues.json

🧿 코드정보

import pandas as pd
import requests
from urllib import parse

apiKey = 'RGAPI-ec88f78b-30bb-4e66-80b4-e981bc438297'
username = '엉덩이요리사요한' # 유저아이디
champ = 'Udyr' # 원하는 챔프(머신러닝결과값)

id = parse.quote(username) # 아이디를 URL 인코딩

url = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + id +'?api_key=' + apiKey #puuid값을 가져오기 위한 주소
r = requests.get(url)
r = r.json()
puuid = r['puuid'] # 해당 유저의 puuid 값 가져오기

# 랭크 n경기 매치아이디 가져오기
n = str(10)
rankUrl = 'https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/' + puuid + '/ids?queue=420&type=ranked&start=0&count='+n+'&api_key='+ apiKey
r = requests.get(rankUrl)
r = r.json()

rankId = r
print(rankId)









승리 여부 및 킬뎃 데이터 추출


🧿 코드정보

win = []
deaths = []
kills = []
for i in rankId:
    url = 'https://asia.api.riotgames.com/lol/match/v5/matches/' + i + '?api_key=' + apiKey
    r = requests.get(url)
    r = r.json()
    info = r['info']  # 전체 데이터에서 info를 추출
    part = info['participants'] # info 데이터에서 유저들의 정보 추출
    for j in range(0,10): # 총 10명의 유저중 내가 원하는 puuid값을 가진 유저를 추출
        if part[j]['puuid'] == puuid:
            if part[j]['championName'] == champ: # 유저가 champ를 플레이했던 매치데이터를 추출
                win.append(part[j]['win'])
                deaths.append(part[j]['deaths'])
                kills.append(part[j]['kills'])
                # 승리, 킬뎃값 넣어주기

print(win)
print(deaths)
print(kills)









웹에 띄울 결과를 코드로 작성해보았다.


🧿 코드정보

df = pd.DataFrame(win)
df['win'] = win
df['kills'] = kills
df['deaths'] = deaths
df['KDA'] = df['kills'] / df['deaths']
df = df.drop(columns = 0)
df
print( username +'님의 최근'+ str(games) + '경기 ' + champ + '의 퍼포먼스는?' )
for i in range(0,games):
    print( str(i+1) +'경기: ' + str(df['kills'][i])+ '킬 ' + str(df['deaths'][i]) + '데스로, KDA' + str(df['kills'][i]/df['deaths'][i]) +'를 달성하셨습니다.')
    if df['kills'][i]/df['deaths'][i] < 3:
        print('해당 게임에서 ' + username + ' 님의 ' + champ + ' 실력은' + ' [ 재앙 ] 입니다!')
    else:
        print( '쫌 침. ')

분명 더 깔끔하고 효율적인 코드들이 있겠지만, 아직 내 실력으로는 이렇게해서 원하는 결과를 낼 수 있다는 것에 큰 성취감을 느끼며 주말을 마무리할 수 있었다.




📌 결과물

유저가 아이디와 롤 캐릭터 사진을 올렸을때,

롤 챔피언 분류 머신러닝 모델의 결과값을 이용하여,

해당 유저의 랭크 게임정보를 웹에 출력하는 것을 구현

OP.GG 흉내내기 성공!!!!!!!

아 뿌 듯 ㅎ ㅐ ^^ 😚😚

profile
Intuition factory: from noob to pro

2개의 댓글

comment-user-thumbnail
2022년 5월 23일

준헌님 잘보고 갑니다요 😉👍

1개의 답글