에서 Riot API를 사용하는 간단한 방법을 확인했다.
이제 이걸로 전적조회사이트를 대충 만들어보려고 한다.
흔히 사용하는 전적조회사이트를 생각해보자.
해당 소환사명으로 검색하면, 최근 플레이한 게임에 대한 정보가 간략하게 뜬다.
따라서 내가 Riot API를 사용해야 하는 순서를 생각해보면,
1. SUMMONER-V4의 by-name을 통해서 encryptedAccountId를 알아낸다.
2. MATCH-V4의 matchlists/by-account를 통해서 matchId들을 받아온다.
3. MATCH-V4의 matches를 통해서 각 게임의 정보를 받아온다.
어떤식으로 API 서버에서 응답이 오는지 필자의 계정으로 확인을 해보자.
accountId로 matchlists를 불러오자.
모든 게임이 뜨는 건 아닌것 같고, 거의 100개 정도의 게임 정보가 뜬다.
그 말은 그 이전의 게임은 조회할 수 없다는 것.
op.gg의 대단함이 느껴진다.
가장 최근 경기의 gameId로 조회해보자.
별의 별 정보가 다 들어있는 듯 하다.
게임 끝나고 통계창에 있는 내용은 다 들어있는 것 같다.
필요한 것만 빼서 써보도록 하자.
# views.py
name = request.GET['summoner_name']
summoner_name = parse.quote(name)
# url에 담게 인코딩
request_url = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + summoner_name + '?api_key=' + api_key
data = requests.get(request_url)
data = data.json()
# dict으로 변환
account_id = data['accountId']
# accountId를 가져왔다.
...
request_url = 'https://kr.api.riotgames.com/lol/match/v4/matchlists/by-account/' + summoner['account_id'] + '?api_key=' + api_key
data = requests.get(request_url)
matches = data.json()['matches']
# matchlist를 쭉 가져온다.
...
for match in matches:
request_url = 'https://kr.api.riotgames.com/lol/match/v4/matches/' + str(match['gameId']) + '?api_key=' + api_key
# gameId는 int니까 형변환
data = requests.get(request_url)
data = data.json()
play_time = data['gameDuration']
queue_id = data['queueId']
players = []
# 각 플레이어들의 정보를 담아보자.
for part in data['participants']:
player = dict()
player['id'] = part['participantId']
player['champion'] = part['championId']
player['spell1'] = part['spell1Id']
player['spell2'] = part['spell2Id']
player['level'] = part['stats']['champLevel']
player['kills'] = part['stats']['kills']
player['deaths'] = part['stats']['deaths']
player['assists'] = part['stats']['assists']
player['kda'] = round((player['kills'] + player['assists']) / player['deaths'], 2)
player['item0'] = part['stats']['item0']
player['item1'] = part['stats']['item1']
player['item2'] = part['stats']['item2']
player['item3'] = part['stats']['item3']
player['item4'] = part['stats']['item4']
player['item5'] = part['stats']['item5']
player['item6'] = part['stats']['item6']
player['visionscore'] = part['stats']['visionScore']
player['gold'] = part['stats']['goldEarned']
player['cs'] = part['stats']['totalMinionsKilled']
players.append(player)
...
chapionId, spellId, item들은 전부 int형 id값으로 나타나고 이 id값은 developer.riotgames.com/docs/lol에서 확인할 수 있다.
이런식으로 각 match의 정보들을 담아낼 수 있다.
뭔가 예쁘게 만들어서 포스팅 하고 싶었는데 애초에 프론트는 아무것도 할 줄 몰라서 완성이 안되는 중이다.
참고로 Riot API는 개인에게는 1초에 20회, 2분당 100회의 응답 제한을 두고 있어서,
제한을 두지 않으면 오류가 날 수도 있다.
완성이 되면 추가적으로 포스팅을 해야겠다.
'Web > Django' 카테고리의 다른 글
[Django] 특정 시간에 자동으로 메일 보내기 (0) | 2019.08.13 |
---|