스파르타코딩클럽 내일배움단 웹 개발 종합반을 진행한지 어느덧 한달이 지나갔다.
그동안 많이 늘었나? 싶으면서도 자신이 없었는데
다가온 주말을 기회로 키보드 청소(다시는 하기 싫다.),
컴퓨터 청소를 포함해서 집안 대청소도 하고,
그동안 하고싶었던 롤 API서버를 이용한 데이터 추출 작업을 해봤다 :)
데이터를 처리하면서 내 머리 속에서 굴러다닌 로직들을 잃고 싶지 않아서 글을 써야겠다.
롤 api서버를 이용하려면 가장먼저 API Key를 부여받아야 한다.
https://developer.riotgames.com/
로그인만하면 쉽게 key를 부여받을 수 있지만 Rate limit가 상당히 짜다.
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 흉내내기 성공!!!!!!!
아 뿌 듯 ㅎ ㅐ ^^ 😚😚
준헌님 잘보고 갑니다요 😉👍