본문 바로가기

Web/Django

[Django] Riot API로 전적조회 사이트 만들기 - 1

ediblepotato.tistory.com/4

 

Riot API 사용해보기

https://developer.riotgames.com/ Riot Developer Portal About the Riot Games API With this site we hope to provide the League of Legends developer community with access to game data in a secure and r..

ediblepotato.tistory.com

 

에서 Riot API를 사용하는 간단한 방법을 확인했다.

 

이제 이걸로 전적조회사이트를 대충 만들어보려고 한다.

 

흔히 사용하는 전적조회사이트를 생각해보자.

 

출처 : fow.kr

 

해당 소환사명으로 검색하면, 최근 플레이한 게임에 대한 정보가 간략하게 뜬다.

 

따라서 내가 Riot API를 사용해야 하는 순서를 생각해보면,

 

1. SUMMONER-V4의 by-name을 통해서 encryptedAccountId를 알아낸다.

 

2. MATCH-V4의 matchlists/by-account를 통해서 matchId들을 받아온다.

 

3. MATCH-V4의 matches를 통해서 각 게임의 정보를 받아온다.

 

소환사명으로 encryptedAccountId를 알아내야,
matchlists를 받아오고, 각각의 match를 조회할 수 있다.

 

어떤식으로 API 서버에서 응답이 오는지 필자의 계정으로 확인을 해보자.

 

암호화된 아이디들이 뜬다.

 

accountId로 matchlists를 불러오자.

 

우리가 필요한 정보는 gameId와 champion 정도.

 

모든 게임이 뜨는 건 아닌것 같고, 거의 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