본문 바로가기

백앤드 개발/Spring boot 기반 롤 전적 사이트 개발

[Spring 프로젝트] 라이엇 API 분석

요구사항

  • RIOT 에서 제공하는 API  사용
  • 다음 정보를 조회하기 위한 API 분석
    • 소환사 정보 (닉네임, 레벨, 티어, 승/패) 표기
    • 최근 10 게임 플레이한 챔피언, 승/패, 경기 시간, KDA

미리보기

 

 

1. Riot API 인증키 신청

1.1 Personal API KEY 신청

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

developer.riotgames.com

 

라이엇에서 제공하는 API를 사용하기 위해서는 API KEY가 필요하다.

기본적으로 제공하는 DEVELOPMENT API KEY 는 만료기간이 하루밖에 되지 않기 때문에

PRODUCTION API KEY 또는 PERSONAL API KEY를 발급받아야 한다.

 

PRODUCTION API KEY 의 경우, Rate Limit이 크게 설정되어 있으나 프로토타입과 웹사이트가 존재해야 한다.

PERSONAL API KEY를 신청했고 승인에는 약 1주일이 소요됐다.

 

 

2. API 분석

소환사 정보  (닉네임, 레벨, 티어, 승/패) 와 최근 10 게임 플레이한 챔피언, 승/패, 경기 시간, KDA 표기에 필요한 API 분석

 

2.1 소환사명(닉네임) 으로 소환사 정보 조회

https://developer.riotgames.com/apis#summoner-v4/GET_getBySummonerName

 

Riot Developer Portal

 

developer.riotgames.com

  • 소환사명을 파라미터로 받아 소환사 정보를 리턴
  • URL: /lol/summoner/v4/summoners/by-name/{summonerName}
  • PARAMETERS: summonerName(닉네임)
  •  puuid(암호화된 id) , name(닉네임), profileIconId(프로필 아이콘) 등이 포함된 SummonerDTO 반환
{
    "id": "DH5MIytFZh8VrLpgBN13Z8D_qtbUOxjFvaLEICT6D1ej569ByWE3uVTqrQ",
    "accountId": "4TApzb_wv2EOJ14EjfXcW_EzYp9y_lOfRJfQvaozmZbQrly1DA0SaPVb",
    "puuid": "i_38dlbm4doAQER1JgyLQwzLv2sXG5FMbeOB2yccygOgY08owEcajDHAyVEBOt6G7QGufraUiSplYA",
    "name": "너에게난뭐냐",
    "profileIconId": 5904,
    "revisionDate": 1704552464000,
    "summonerLevel": 115
}

 

 

2.2 id 값으로 리그(티어) 조회

https://developer.riotgames.com/apis#league-v4/GET_getLeagueEntriesForSummoner

 

Riot Developer Portal

 

developer.riotgames.com

  • 위에서 응답한 고유 id 값 (닉네임X) 을 파라미터로 받아 티어 정보 리턴
  • URL: /lol/league/v4/entries/by-summoner/{encryptedSummonerId}
  • PARAMETERS: encryptedSummonerId (id)
  • queueType(게임 타입), tier/rank (티어), wins/losses(승/패)  등이 포함된 LeagueEntryDTO 랭크 티어 반환
  • 솔로랭크/팀랭크 정보가 리스트 형태로 조회, Set[LeagueEntryDTO] 형태로 반환. DTO 또는 반환타입 설정에 주의!
[
    {
        "leagueId": "9a8affde-d6b2-487d-a6f5-1b17de0f12bd",
        "queueType": "RANKED_SOLO_5x5",
        "tier": "EMERALD",
        "rank": "III",
        "summonerId": "DH5MIytFZh8VrLpgBN13Z8D_qtbUOxjFvaLEICT6D1ej569ByWE3uVTqrQ",
        "summonerName": "너에게난뭐냐",
        "leaguePoints": 0,
        "wins": 128,
        "losses": 132,
        "veteran": false,
        "inactive": false,
        "freshBlood": false,
        "hotStreak": false
    },
    {
        "leagueId": "89c9e861-d4d2-4cdd-85e3-cb2ebd98b6fd",
        "queueType": "RANKED_FLEX_SR",
        "tier": "GOLD",
        "rank": "I",
        "summonerId": "DH5MIytFZh8VrLpgBN13Z8D_qtbUOxjFvaLEICT6D1ej569ByWE3uVTqrQ",
        "summonerName": "너에게난뭐냐",
        "leaguePoints": 46,
        "wins": 3,
        "losses": 5,
        "veteran": false,
        "inactive": false,
        "freshBlood": false,
        "hotStreak": false
    }
]

 

 

2.3 puuid로 최근 매치 ID 조회

https://developer.riotgames.com/apis#match-v5/GET_getMatchIdsByPUUID

 

Riot Developer Portal

 

developer.riotgames.com

  • puuid 를 파라미터로 받아 최근 전적 고유 ID를 리턴
  • URL: /lol/match/v5/matches/by-puuid/{puuid}/ids
  • PARAMETERS: puuid
  • Optional 하게 type(매치 타입), start(시작 인덱스), count(리턴될 매치수) 등을 PARAMETERS로 설정 가능
  • 매치 ID 가 List[string] 형태로 반환
[
    "KR_6889068629",
    "KR_6889020368",
    "KR_6888917320",
    "KR_6888859313",
    "KR_6870545573",
    "KR_6870490931",
    "KR_6870433843",
    "KR_6870378653",
    "KR_6870339983",
    "KR_6870316266",
    "KR_6869523333",
    "KR_6869478582",
    "KR_6869442460",
    "KR_6848903743",
    "KR_6819919307",
    "KR_6819860613",
    "KR_6819766664",
    "KR_6819662900",
    "KR_6819613858",
    "KR_6819558426"
]

 

 

2.4 매치 ID로 상세 매치 정보 조회

https://developer.riotgames.com/apis#match-v5/GET_getMatch

 

Riot Developer Portal

 

developer.riotgames.com

  • 매치 ID를 파라미터로 상세 매치 정보 조회
  • URL: /lol/match/v5/matches/{matchId}
  • PARAMETERS: matchId
  • InfoDto(게임 정보), ParticipantDto(유저별 상세 정보), TeamDto(팀 정보) 등이 담긴 MatchDto 반환
  • 필드값이 매우 많고 구조가 복잡하므로 어떠한 필드를 사용할 것인지 파악하는 것이 중요
  • 사용할 필드값: InfoDto.gameMode (일반게임/칼바람), InfoDto.gameDuration(게임 시간), ParticipantDto.win(승/패), ParticipantDto.kills (킬), ParticipantDto.deaths(데스), ParticipantDto.assists(어시스트), ParticipantDto.championId (챔피언 고유 아이디) 등
{
    "metadata": {
        "dataVersion": "2",
        "matchId": "KR_6889068629",
        
        // 사용자 puuid
        "participants": [
            "F8q4CEKpKpBRZlFBGGg2HCYrPy0FhmSx_8hQFdPsN3_zyXD8Jqt70WkY6vZyhkFWJvclSooWQUfqzQ",
            "wm-IlY9IaQpnbZkPTJcy75UKwqS9LAH1dpnesgeRaxlrQ679ONMH8RXXkTNROqWLF-7Yy8yCvyhqmQ",
			...
        ]
    },
    
    // 게임 정보
    "info": {
        "gameCreation": 1704551452992,
        "gameDuration": 972,
        "gameEndTimestamp": 1704552453363,
        "gameId": 6889068629,
        "gameMode": "CLASSIC",
		...
        
        // 사용자별 상세 정보
        "participants": [
            {
                "allInPings": 0,
                "assistMePings": 0,
                "assists": 2,
                "baitPings": 0,
                ...

                "challenges": {
                   ...
                },
                ...
            },
            ...