OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 3

2020. 9. 15. 23:02클론을 해보자

OP.GG를 클로닝한 SIMPLE.GG의 기능은 다음과 같습니다.

 

 

  • 소환사의 현재 티어를 보여 줌
  • 소환사의 최근 10게임 승률을 보여 줌.
  • 소환사가 현재 게임을 진행 중인지 알려 줌.

 

이 기능들은 Riot Games 사의 API를 이용하여 만들 수 있습니다.

라이엇 게임즈의 API를 이용하기 위해서 다음 사이트로 이동합니다.

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 reliable way. This is just part of our ongoing effort to respond to players' and developers' requests for data and

developer.riotgames.com

로그인 하면 다음과 같은 화면이 나옵니다. 

롤 API는 DEVELOPMENT API KEY를 이용하여 인증을 해야 사용할 수 있습니다. Production을 인증하지 않은 경우에는 Rate Limit이 설정되어있습니다. 1초에 최대 20 request, 2분에 최대 100 request입니다.

또한, API KEY가 하루 단위로 소멸되기 때문에 매일마다 API KEY를 발급받아야한다는 단점을 가지고 있습니다.

Local 환경에서 서버를 돌릴 때는 큰 requests는 필요하지 않기 때문에 우선 이대로 사용하도록 하고, 필요하다면 사이트를 다 만들고 production key를 발급받는 과정까지 보여드리겠습니다.

 

이제 API를 통해 기능을 만들어보도록 하겠습니다.

 

우선 첫 번째 기능인 소환사의 현재 티어를 보여주는 기능부터 구현 해보도록 하겠습니다.

현재 티어를 보여주기 위해 사용하는 API 는 /lol/summoner/v4/summoners/by-name/{summonerName} 입니다.

summonerName에 정보를 가지고 올 소환사의 이름을 넣고, GET request를 하면 해당 소환사의 정보를 가져다 주는 API입니다. 테스트를 해보도록 하겠습니다. T1의 Faker 선수의 아이디인 Hide On Bush를 넣어보도록 하겠습니다.

hide on bush 부분의 빈칸에 %2O라고 표시되어있는 것을 보니 urlencoding을 해야하는 것 같습니다.

GET Request를 하면서 Header 값들을 넣어주면, 정상적으로 response body가 출력되는 것을 확인할 수 있습니다.

응답 본문에는 id, accountId, puuid, name, profileIconId, revisionDate, summonerLevel 이 나와있습니다. 해당하는 값들이 무엇을 의미하는지에 대해 파악하는 것은 중요하지 않습니다.

다음 API에서 무엇을 넣으라고 친절하게 알려주기 때문이죠. 우리는 encrypt된 id를 쓰기 위해 summoner 이름으로 GET requests를 보낸 것입니다.

다음 API는 /lol/league/v4/entries/by-summoner/{encryptedSummonerId} 입니다. encryptedsummonerId를 넣어주어야 합니다. 이를 위해서 우리는 윗부분의 summoner/by-name api를 사용한 것입니다. encrypt된 id를 넣어주어 마찬가지로 GET으로 request 했습니다.

다음과 같이 response body가 정상적으로 나오는 것을 확인할 수 있습니다. 우리는 tier부분의 GRANDMASTER를 가져오면 됩니다. API에 대한 파악이 이루어졌으니 이를 Python 코드로 작성해보도록 하겠습니다.

 

다음은 summonerName을 encryptId로 변환해주는 코드입니다. 파이썬 3으로 작성되었습니다.

import requests
from urllib import parse

def encrypt(DEVELOPMENTAPIKEY,summonerName):
    encodingSummonerName = parse.quote(summonerName)
    APIURL = "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/" + encodingSummonerName
    headers = {
        "Origin": "https://developer.riotgames.com",
        "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Riot-Token": DEVELOPMENTAPIKEY,
        "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
        }
    res = requests.get(APIURL, headers=headers)
    data = res.json()
    return data["id"]
print(encrypt("RGAPI-eab999c7-926a-45fa-8db3-8716db1c09d2","HIDE ON BUSH"))

다음은 encryptId를 이용하여 summoner의 현재 티어를 출력해주는 코드입니다. 마찬가지로 파이썬 3으로 작성되었습니다.

import encryptId
import requests

def getTier(DEVELOPMENTAPIKEY,summonerName):
    encryptedId = encryptId.encrypt(DEVELOPMENTAPIKEY,summonerName)
    headers = {
        "Origin": "https://developer.riotgames.com",
        "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Riot-Token": DEVELOPMENTAPIKEY,
        "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
        }
    APIURL = "https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/" + encryptedId
    res = requests.get(APIURL, headers=headers)
    data = res.json()
    return data[0]["tier"]

DEVELOPMENTAPIKEY = "RGAPI-eab999c7-926a-45fa-8db3-8716db1c09d2"
summonerName = "HIDE ON BUSH"

print(getTier(DEVELOPMENTAPIKEY,summonerName))

 

  • 소환사의 현재 티어를 보여 줌
  • 소환사의 최근 10게임 승률을 보여 줌.
  • 소환사가 현재 게임을 진행 중인지 알려 줌.

 

우리가 목표로 한 세개의 기능 중 첫 번째 기능이 파이썬으로 구현되었습니다. 다음 글에서는 아래 두가지 기능을 구현해보도록 하겠습니다. 코드에 대한 이해가 어려운 분은 댓글로 남겨주시면 추가 설명 드리겠습니다.