반응형

MATCH-V5

 

매치기록이 담겨있는 MATCH-V5 관련 파이썬 코드를 작성하였습니다.

 

해당 API는 다음과 같이 3개 존재합니다.

 

(matchID라는 새로운 변수가 보이는데, 게임 진행시 고유 게임번호를 나타내는 변수입니다.)

필요 모듈과 기본 세팅은 Summoner-V4 와 같습니다.

 

import requests
import pprint

pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

 

계정정보(PUUID)로 게임 MATCH ID 넘겨받기

함수 :

변수 설명 :

puuid : 소환사 고유 puuid

start : 가장 최근 경기부터 알고 싶으면 0, (예 : 가장 최근에 했던 3번째 경기부터 알고 싶다면 3)

count : 결과를 몇개 까지 받을지 (max : 100)

def match_v5_get_list_match_id(puuid, start, count):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/{puuid}/ids?start={start}&count={count}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

(페이커 선수의 puuid의 가장 최근 경기부터 10번째 경기 까지 검색)

pp.pprint(match_v5_get_list_match_id("1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw", 0, 10))

호출 결과 :

[   'KR_5192353258',
    'KR_5192353157',
    'KR_5192353061',
    'KR_5192353033',
    'KR_5192353008',
    'KR_5192352958',
    'KR_5192797149',
    'KR_5191206658',
    'KR_5191206653',
    'KR_5191206602'
]

 

해당 게임(Match ID) 에 관련된 모든 정보 받기

(가장 최근 경기는 바로 업데이트 안되는 것 확인, 그래서 이전 경기로 검색)

 

함수 :

def match_v5_get_match_history(matchId):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/{matchId}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(match_v5_get_match_history("KR_5284291168"))

호출 결과 :

{   'info': {   'gameCreation': 1624630396000,
                'gameDuration': 1992129,
                'gameId': 5284291168,
                'gameMode': 'CLASSIC',
                'gameName': 'teambuilder-match-5284291168',
                'gameStartTimestamp': 1624630434699,
                'gameType': 'MATCHED_GAME',
                'gameVersion': '11.13.382.1241',
                'mapId': 11,
                'participants': [   {   'assists': 12,
                                        'baronKills': 0,
                                        'bountyLevel': 0,
                                        'champExperience': 9714,
                                        'champLevel': 12,
                                        'championId': 412,
                                        'championName': 'Thresh',
                                        'championTransform': 0,
                                        'consumablesPurchased': 6,
                                        'damageDealtToBuildings': 0,
                                        'damageDealtToObjectives': 802,
                                        'damageDealtToTurrets': 0,
                                        'damageSelfMitigated': 13046,
                                        'deaths': 6,
                                        'detectorWardsPlaced': 5,
                                        'doubleKills': 0,
                                        'dragonKills': 0,
                                        'firstBloodAssist': False,
                                        'firstBloodKill': False,
                                        'firstTowerAssist': False,
                                        'firstTowerKill': False,
                                        'gameEndedInEarlySurrender': False,
                                        'gameEndedInSurrender': False,
                                        'goldEarned': 6955,
                                        'goldSpent': 6300,
                                        'individualPosition': 'UTILITY',
                                        'inhibitorKills': 0,
                                        'inhibitorTakedowns': 0,
                                        'inhibitorsLost': 2,
                                        'item0': 3190,
                                        'item1': 2033,
                                        'item2': 3857,
                                        'item3': 3117,
                                        'item4': 3067,
                                        'item5': 3801,
                                        'item6': 3364,

(너무 길어서 생략...)

 

해당 게임(Match ID) 에 관련된 모든 정보 타임라인별로 받기

함수 :

def match_v5_get_match_timeline(matchId):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/{matchId}/timeline"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(match_v5_get_match_timeline("KR_5284291168"))

호출 결과 :

{   'info': {   'frameInterval': 60000,
                'frames': [   {   'events': [   {   'realTimestamp': 1624630434573,
                                                    'timestamp': 0,
                                                    'type': 'PAUSE_END'},
                                                {   'creatorId': 0,
                                                    'timestamp': 0,
                                                    'type': 'WARD_PLACED',
                                                    'wardType': 'UNDEFINED'}],
                                  'participantFrames': {   '1': {   'championStats': {   'abilityHaste': 0,
                                                                                         'abilityPower': 0,
                                                                                         'armor': 28,
                                                                                         'armorPen': 0,
                                                                                         'armorPenPercent': 0,
                                                                                         'attackDamage': 25,
                                                                                         'attackSpeed': 100,
                                                                                         'bonusArmorPenPercent': 0,
                                                                                         'bonusMagicPenPercent': 0,
                                                                                         'ccReduction': 0,
                                                                                         'cooldownReduction': 0,
                                                                                         'health': 530,
                                                                                         'healthMax': 530,
                                                                                         'healthRegen': 0,
                                                                                         'lifesteal': 0,
                                                                                         'magicPen': 0,
                                                                                         'magicPenPercent': 0,
                                                                                         'magicResist': 30,
                                                                                         'movementSpeed': 335,
                                                                                         'omnivamp': 0,
                                                                                         'physicalVamp': 0,
                                                                                         'power': 274,
                                                                                         'powerMax': 274,
                                                                                         'powerRegen': 0,
                                                                                         'spellVamp': 0},
                                                                    'currentGold': 500,
                                                                    'damageStats': {   'magicDamageDone': 0,
                                                                                       'magicDamageDoneToChampions': 0,
                                                                                       'magicDamageTaken': 0,
                                                                                       'physicalDamageDone': 0,
                                                                                       'physicalDamageDoneToChampions': 0,
                                                                                       'physicalDamageTaken': 0,
                                                                                       'totalDamageDone': 0,
                                                                                       'totalDamageDoneToChampions': 0,
                                                                                       'totalDamageTaken': 0,
                                                                                       'trueDamageDone': 0,
                                                                                       'trueDamageDoneToChampions': 0,
                                                                                       'trueDamageTaken': 0},
                                                                    'goldPerSecond': 0,

(너무 길어서 생략...)

 

전체코드 :

import requests
import pprint

pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }


def match_v5_get_list_match_id(puuid, start, count):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/{puuid}/ids?start={start}&count={count}"
    return requests.get(url, headers=request_header).json()


def match_v5_get_match_history(matchId):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/{matchId}"
    return requests.get(url, headers=request_header).json()


def match_v5_get_match_timeline(matchId):
    url = f"https://asia.api.riotgames.com/lol/match/v5/matches/{matchId}/timeline"
    return requests.get(url, headers=request_header).json()

 

반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-EXP-V4) 코드 구현  (0) 2021.07.26
Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20

 

LEAGUE-EXP-V4

 

리그 EXP V4 관련 파이썬 코드를 작성하였습니다.

해당 API는 한개만 존재합니다.

LEAGUE-V4의 "큐(솔로/자유 랭크)별 티어별(다이아, 플래티넘, 브/실/골/아이언) 등급별( 1, 2, 3 등) 소환사 정보" 와 동일합니다.

차이점은 신의 리그(챌린저/그랜드마스터/마스터) 티어도 추가 된 것입니다.

 

즉, LEAGUE-V4는 챌린저/그랜드마스터/마스터 와 그 외 티어들을 분리하여 API를 각각 제공 해준것이고, LEAGUE-EXP-V4는 모두 통합하여 API를 제공해주는 것입니다. (챌린저/그랜드마스터/마스터 의 데이터만 건드실 거면, LEAGUE-EXP-V4 는 사용 안하셔도 됩니다.)

 

그렇기 때문에, LEAGUE-V4의 마지막 코드와 거의 같다고 보시면 됩니다.

 

동일한 모듈 불러와주시고..

 

import requests
import pprint

pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

 

함수 :

변수 설명 :

queue : 솔로 랭크 = solo, 자유 랭크 = free

tier : 티어 선택 (CHALLENGER, GRANDMASTER, MASTER, DIAMOND, PLATINUM, GOLD, SILVER, BRONZE, IRON)

division : 각 티어 몇 단계인지 (1, 2, 3, 4)

*챌린저, 그랜드마스터, 마스터는 고정 1단계. 코드에서 고정 1로 되게 처리해 두었음.

page_number : 페이지당 결과가 약 200개씩 보관되어 있음

def league_v4_queue_tier_division(queue, tier, division, page_number):
    if division == 1 or tier in ["CHALLENGER", "GRANDMASTER", "MASTER"]:
        division = 'I'
    elif division == 2 :
        division = 'II'
    elif division == 3 :
        division = 'III'
    elif division == 4:
        division = 'IV'
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league-exp/v4/entries/{queue}/{tier}/{division}?page={page_number}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(league_v4_queue_tier_division("solo", "MASTER",1,1))
pp.pprint(league_v4_queue_tier_division("solo", "SILVER",3,3))

호출 결과 :

[   {   'freshBlood': True,
        'hotStreak': False,
        'inactive': False,
        'leagueId': 'dbb721c8-b8fa-3d0c-9727-bfa4eabefc30',
        'leaguePoints': 448,
        'losses': 433,
        'queueType': 'RANKED_SOLO_5x5',
        'rank': 'I',
        'summonerId': 'E9EPLZMy5f9bR2axntFp-DjeFhyxUTE6ncoKG9VfEcRIWw',
        'summonerName': 'Renshou25',
        'tier': 'MASTER',
        'veteran': False,
        'wins': 491},
    {   'freshBlood': True,
        'hotStreak': False,
        'inactive': False,
        'leagueId': 'dbb721c8-b8fa-3d0c-9727-bfa4eabefc30',
        'leaguePoints': 432,
        'losses': 679,
        'queueType': 'RANKED_SOLO_5x5',
        'rank': 'I',
        'summonerId': 'sdFSW3XHkgEjksmQGvAfUemoa01SNgKiEeQg5Qdj_4-E8sKfYnhtgLckjA',
        'summonerName': '고기볶음주세요',
        'tier': 'MASTER',
        'veteran': False,
        'wins': 713},

 

전체 코드 :

import requests
import pprint

pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }


def league_v4_queue_tier_division(queue, tier, division, page_number):
    if division == 1 or tier in ["CHALLENGER", "GRANDMASTER", "MASTER"]:
        division = 'I'
    elif division == 2 :
        division = 'II'
    elif division == 3 :
        division = 'III'
    elif division == 4:
        division = 'IV'
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league-exp/v4/entries/{queue}/{tier}/{division}?page={page_number}"
    return requests.get(url, headers=request_header).json()
반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (MATCH-V5) 코드 구현  (0) 2021.07.26
Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20

LEAGUE-V4

리그 V4 관련 파이썬 코드를 작성하였습니다.

 

리그 V4관련 API는 다음과 같이 총 6개가 존재합니다.

필요 모듈과 기본 세팅은 Summoner-V4 와 같습니다.

import requests
from urllib import parse
import pprint
pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-d01fa30c-f66c-49bf-a987-9c5b79b8f7e4'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

 

 

신의 리그 (챌린저리그 / 그랜드마스터리그/ 마스터리그) 큐별 소환사 정보

함수 :

변수 설명 :

queue : 솔로 랭크 = solo, 자유 랭크 = free

tier : 티어 선택 (CHALLENGER, GRANDMASTER, MASTER)

def league_v4_god_league(queue, tier):
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league/v4/{tier.lower()}leagues/by-queue/{queue}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(league_v4_god_league("challenger", "solo"))
pp.pprint(league_v4_god_league("challenger", "free"))

pp.pprint(league_v4_god_league("grandmaster", "solo"))
pp.pprint(league_v4_god_league("grandmaster", "free"))

pp.pprint(league_v4_god_league("master", "solo"))
pp.pprint(league_v4_god_league("master", "free"))

 

호출 결과 :

{   'entries': [   {   'freshBlood': False,
                       'hotStreak': True,
                       'inactive': False,
                       'leaguePoints': 1138,
                       'losses': 256,
                       'rank': 'I',
                       'summonerId': 'HOSYigNzY0--ax_zS_wCcGmu9-_qb5fhNunGJswbQZ1QGFwQdkSLU2Eg4g',
                       'summonerName': 'sword god14',
                       'veteran': True,
                       'wins': 323},
                   {   'freshBlood': False,
                       'hotStreak': False,
                       'inactive': False,
                       'leaguePoints': 920,
                       'losses': 142,
                       'rank': 'I',
                       'summonerId': 'hlx4Nzj5qZS-PwH4eVqivAxqMT_FItj_0Y9Z-1HBnNXIgzg',
                       'summonerName': 'Pnpm',
                       'veteran': True,
                       'wins': 187},

(너무 길어서 생략)

 

소환사가 속해 있는 리그 정보

함수 :

def league_v4_summoner_league(summoner_id):
    url = f"https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

(페이커 선수 summoner_id)

pp.pprint(league_v4_summoner_league("ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw"))

호출 결과 :

[   {   'freshBlood': True,
        'hotStreak': False,
        'inactive': False,
        'leagueId': 'a37af09b-ecb8-3664-9453-cf2b0138dd6e',
        'leaguePoints': 731,
        'losses': 512,
        'queueType': 'RANKED_SOLO_5x5',
        'rank': 'I',
        'summonerId': 'ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw',
        'summonerName': 'Hide on bush',
        'tier': 'GRANDMASTER',
        'veteran': False,
        'wins': 559}]

 

 

챌린저리그 ID로 리그 정보

함수 :

def league_v4_league_id(league_id):
    url = f"https://kr.api.riotgames.com/lol/league/v4/leagues/{league_id}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

(위 페이커 선수 summoner_id로 league_id 알아 내서 검색)

pp.pprint(league_v4_league_id("a37af09b-ecb8-3664-9453-cf2b0138dd6e"))

호출 결과 :

{   'entries': [   {   'freshBlood': False,
                       'hotStreak': False,
                       'inactive': False,
                       'leaguePoints': 456,
                       'losses': 190,
                       'rank': 'I',
                       'summonerId': 'sdQ875-vjnsVtDyVBOK-0zV5LUBV_TrCqfN70asTKFLO0gKtF87unNnw0Q',
                       'summonerName': '농심 DnDn',
                       'veteran': True,
                       'wins': 225},
                   {   'freshBlood': True,
                       'hotStreak': False,
                       'inactive': False,
                       'leaguePoints': 782,
                       'losses': 328,
                       'rank': 'I',
                       'summonerId': 'lY20qSDKzEwJTXS6x9XJUuK28Kjs4MUIR27msQndo43q5m4ccJLZU6gCFA',
                       'summonerName': 'bilibilinico',
                       'veteran': False,
                       'wins': 394},

 

 

큐(솔로/자유 랭크)별 티어별(다이아, 플래티넘, 브/실/골/아이언) 등급별( 1, 2, 3 등) 소환사 정보

함수 :

변수 설명 :

queue : 솔로 랭크 = solo, 자유 랭크 = free

tier : 티어 선택 (DIAMOND, PLATINUM, GOLD, SILVER, BRONZE, IRON)

division : 각 티어 몇 단계인지 (1, 2, 3, 4)

page_number : 페이지당 결과가 약 200개씩 보관되어 있음

def league_v4_queue_tier_division(queue, tier, division, page_number):
    if division == 1 :
        division = 'I'
    elif division == 2 :
        division = 'II'
    elif division == 3 :
        division = 'III'
    elif division == 4:
        division = 'IV'
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league/v4/entries/{queue}/{tier}/{division}?page={page_number}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

(예 : 플래3 솔로랭크 3번째 목록)

pp.pprint(league_v4_queue_tier_division("solo", "PLATINUM", 3, 3))

호출 결과 :

[   {   'freshBlood': False,
        'hotStreak': True,
        'inactive': False,
        'leagueId': '4679287f-7a04-4104-bb00-d3e035b7d891',
        'leaguePoints': 9,
        'losses': 14,
        'queueType': 'RANKED_SOLO_5x5',
        'rank': 'III',
        'summonerId': 'QifHMa7KNBYReZ5xmLgmT5WUsFnq-OfbnNiJHtUTjBh_gctB',
        'summonerName': 'Sweet Magic',
        'tier': 'PLATINUM',
        'veteran': False,
        'wins': 17},
    {   'freshBlood': False,
        'hotStreak': False,
        'inactive': False,
        'leagueId': '3258f35f-94c5-471c-9af8-ae3bb57c4f5a',
        'leaguePoints': 29,
        'losses': 64,
        'queueType': 'RANKED_SOLO_5x5',
        'rank': 'III',
        'summonerId': 'qTlCZRu62E1YV7jGi1K-gAxQexyEq7l1HuuxGT7UnolQy5Ee',
        'summonerName': 'king vladi',
        'tier': 'PLATINUM',
        'veteran': False,
        'wins': 79},

(너무 길어서 생략)

 

import requests
import pprint

pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30313'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

def league_v4_god_league(queue, tier):
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league/v4/{tier.lower()}leagues/by-queue/{queue}"
    return requests.get(url, headers=request_header).json()


def league_v4_summoner_league(summoner_id):
    url = f"https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}"
    return requests.get(url, headers=request_header).json()


def league_v4_league_id(league_id):
    url = f"https://kr.api.riotgames.com/lol/league/v4/leagues/{league_id}"
    return requests.get(url, headers=request_header).json()


def league_v4_queue_tier_division(queue, tier, division, page_number):
    if division == 1 :
        division = 'I'
    elif division == 2 :
        division = 'II'
    elif division == 3 :
        division = 'III'
    elif division == 4:
        division = 'IV'
    if queue == "solo" :
        queue = "RANKED_SOLO_5x5"
    elif queue == "free" :
        queue = "RANKED_FLEX_SR"
    url = f"https://kr.api.riotgames.com/lol/league/v4/entries/{queue}/{tier}/{division}?page={page_number}"
    return requests.get(url, headers=request_header).json()
반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (MATCH-V5) 코드 구현  (0) 2021.07.26
Riot API (LEAGUE-EXP-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20

SUMMONER-V4

 

서머너 V4 관련 파이썬 코드를 작성하였습니다.

 

서머너 V4관련 API는 다음과 같이 총 5개가 존재합니다. 마지막 나의 정보를 얻는 API는 사용이 불가하기 때문에 설명과 코드는 첨부하지 않았습니다.

먼저 필요 모듈은 다음과 같습니다.

import requests
from urllib import parse
import pprint
pp = pprint.PrettyPrinter(indent=4)

pprint는 json 결과를 깔끔하게 보여주기 위해 추가해두었습니다.

 

우선 2개의 변수를 선언합니다.

api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

여기서 api_key는 여러분들이 발급 받았던 api_key를 이용하셔야 합니다.

 

현재 제가 넣은 api_key는 제가 이전에 발급 받고 현재는 만료된 키입니다. 여러분들의 키를 넣어 주세요.

 

또한 request_header은 지난 포스팅에서 API 호출시 2번째로 나타났던 항목입니다. (복사해두라는거 붙여 넣으시면 됩니다.)

 

저와 같은 환경이라면 해당 request header 똑같이 사용하여도 됩니다만 다를 수 있으니 여러분들 환경에 맞게 사용하시고  ("X-Riot-Token": api_key) 이부분만 이렇게 바꿔주시면 됩니다.

 

api_key는 하루마다 갱신을 해줘야 하기 때문에, request_header 안에서 최상단으로 빼두었습니다.

 

소환사명으로 검색

함수 :

def summoner_v4_by_summoner_name(summonerName):
    encodingSummonerName = parse.quote(summonerName)
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{encodingSummonerName}"
    return requests.get(url, headers=request_header).json()

소환사 명을 통해 결과 값을 리턴 받는 함수입니다.

encodingSummonerName은 한글 아이디를 인코딩 시켜주기 위하여 추가해두었습니다.

 

함수 호출 :

pp.pprint(summoner_v4_by_summoner_name("hide on bush"))

호출 결과 :

{   'accountId': 'YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS',
    'id': 'ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw',
    'name': 'Hide on bush',
    'profileIconId': 6,
    'puuid': '1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw',
    'revisionDate': 1627050742000,
    'summonerLevel': 476}

 

 

Account ID로 검색

함수 :

def summoner_v4_by_accountId(accountId):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-account/{accountId}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(summoner_v4_by_accountId("YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS"))

호출 결과 :

{   'accountId': 'YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS',
    'id': 'ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw',
    'name': 'Hide on bush',
    'profileIconId': 6,
    'puuid': '1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw',
    'revisionDate': 1627050742000,
    'summonerLevel': 476}

 

 

PUUID로 검색

함수 :

def summoner_v4_by_puuid(puuid):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-puuid/{puuid}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(summoner_v4_by_puuid("1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw"))

호출 결과 :

{   'accountId': 'YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS',
    'id': 'ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw',
    'name': 'Hide on bush',
    'profileIconId': 6,
    'puuid': '1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw',
    'revisionDate': 1627050742000,
    'summonerLevel': 476}

 

 

Summoner ID 로 검색 :

함수 :

def summoner_v4_summoner_name(id):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/{id}"
    return requests.get(url, headers=request_header).json()

함수 호출 :

pp.pprint(summoner_v4_summoner_name("ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw"))

호출 결과 :

{   'accountId': 'YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS',
    'id': 'ErmVzmx0cl1QCDHqkNPxqD8yntjHg1_d1VdJNr0q01iPdw',
    'name': 'Hide on bush',
    'profileIconId': 6,
    'puuid': '1a2U_f6YkhEatZj1WH8aNomc_60V35WgYGipEBL5dKJ1t08a7M6WDZ1zsI3h6KDX31FiyJjXLnUCdw',
    'revisionDate': 1627050742000,
    'summonerLevel': 476}

 

 

전체 코드 :

import requests
from urllib import parse
import pprint
pp = pprint.PrettyPrinter(indent=4)
api_key = 'RGAPI-5157b8b3-55bb-462d-bdad-f1b0dfc30314'
request_header = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
                    "Accept-Language": "ko,en-US;q=0.9,en;q=0.8,es;q=0.7",
                    "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8",
                    "Origin": "https://developer.riotgames.com",
                    "X-Riot-Token": api_key
                }

def summoner_v4_by_summoner_name(summonerName):
    encodingSummonerName = parse.quote(summonerName)
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{encodingSummonerName}"
    return requests.get(url, headers=request_header).json()


def summoner_v4_by_accountId(accountId):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-account/{accountId}"
    return requests.get(url, headers=request_header).json()


def summoner_v4_by_puuid(puuid):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-puuid/{puuid}"
    return requests.get(url, headers=request_header).json()


def summoner_v4_summoner_name(id):
    url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/{id}"
    return requests.get(url, headers=request_header).json()
반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-EXP-V4) 코드 구현  (0) 2021.07.26
Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20
Riot API 준비하기  (0) 2021.07.20

SUMMONER-V4

 

SUMMONER-V4 API는 사용자에 관련된 정보들을 받을 수 있는 API 입니다.

해당 API에서는 다음과 같이 5가지의 세부 API가 존재합니다. 동일한 API이지만, 어떤 변수를 받을지에 따라서 나뉘어지고 있습니다.

 

첫번째 encrypted AccountId(암호화된 account id)

두번째는 소환사 계정명

세번째는 encrypted PUUID(암호화된 puuid)

네번째는 encrypted SummonerId (암호화된 Summoner ID)

다섯번째는 나의 계정(API 인증을 받은 계정)

 

Account ID와 PUUID, Summoner ID는 Riot이 임의적으로 만든 ID이기 때문에 우리는 이러한 값들은 알지 못합니다.

이 값들을 알기 위해서 우리는 소환사 계정명(2번째 API)을 통해서 알 수 있습니다.

 

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

해당 페이지에서 Summoner Name 에 우리가 잘 알고 있는 페이커 선수 아이디를 넣고 API 요청 버튼을 눌러보겠습니다.

다음과 같은 결과값을 얻을 수 있습니다.

 

첫번째 Request URL 은 우리가 API를 호출한 URL 입니다.

두번째 Request Header은 URL을 호출할 때, 우리가 필요한 정보(유저 환경과 Riot에서 발급받은 키)를 담아서 보내는 것입니다. (코드 작업시 필요한 내용이니 복사 해서 보관하세요!)

세번째 Respnse Code는 호출 결과를 나타냅니다. 결과값으로 200을 받았다는 의미는 API 호출이 정상적으로 되었다는 것을 나타냅니다.

 

400(Bad request), 401(Unauthorized), 403(Forbidden), 404(Data not found), 405(Method not allowed), 415(Unsupported media type), 429(Rate limit exceeded), 500(Internal server error), 502(Bad gateway), 503(Service unavailable), 504(Gateway timeout)

 

네번째, Response Header은 응답에 관한 정보를 나타내주는데 분석에 불필요한 내용이니 무시하셔도 됩니다.

다섯번째, Response Body가 우리가 알고 싶어하는 결과값을 나타내주는 항목입니다.

 

우리는 페이커선수의 소환사 계정명(hide on bush)을 통해서, 페이커 선수의 id(summoner id), account id와 puuid를 알게 되었습니다. 

그럼 페이커 선수의 account id (YKuqwYyemn5bwLLGLrX7rcvJB06tN-KAagNy5DCG0PKS)로 첫번째 API를 사용해보겠습니다.

 

(encrypted AccountId 는 암호화된 Account ID로써 이미 우리가 위 작업에서 받은 Account ID가 암호화된 ID이기 때문에 그냥 넣으시면 됩니다.)

다음과 같이 변수명에 Account ID를 넣어보시고 Execute Request 버튼을 누르면,

계정명을 넣었던 것과 같은 결과를 받게 됩니다. summoner id, puuid도 동일하니 생략하도록 하겠습니다.

 

다음 포스팅에서부터는 파이썬을 통해서 코드로 작업을 진행해보도록 하겠습니다.

 

 

반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20
Riot API 준비하기  (0) 2021.07.20
프로젝트 개요  (0) 2021.07.20

Riot 에서 기본적으로 제공하는 API Key는 27가지가 있습니다. (2021년 7월 기준)

(API 공식 문서 : https://developer.riotgames.com/apis)

그 중 LOL과 관련된 API는 15가지이고, 리그오브룬테라 5가지, 롤토체스 3가지, 발로란트 4가지 입니다.

 

우리는 LOL과 관련된 프로젝트를 진행할것이므로, LOL에 관련된 API만 살펴보도록 하겠습니다.

 

이번 포스팅에서는 API Key에 대해서 간략히 설명을 하고, 각 API 마다 호출하고 결과값은 따로 포스팅을 하도록 하겠습니다.

 

(분석에 있어서 중요한 내용들은 빨강색으로 표시하였음. 주관적인 판단)

 

 

  • ACCOUNT-V1
    • 해당 유저(검색 대상) 관련된 정보를 반환
  • CHAMPION-MASTERY-V4
    • 해당 유저(검색 대상)의 챔피언 숙련도를 오름차순으로 반환
  • CHAMPION-V3
    • 현재 게임에서 무료로 사용할수 있는 챔피언, 신규 유저들이 사용 가능한 챔피언과 신규유저의 max level 을 반환 (신규유저의 max level은 10으로 고정 되어있는데, 이 의미는 신규 유저의 경우, 10레벨까지만 무료 챔피언을 주겠다는 의미이다.)
  • CLASH-V1
    • LOL의 팀 토너먼트 모드인 격전과 관련된 게임/유저 정보를 반환
  • LEAGUE-EXP-V4
    • 랭크(Solo, 자유)에 티어별의 소환사정보를 반환
  • LEAGUE-V4
    • 특정 게임/리그에 속해 있는 유저들의 티어 정보들을 반환한다.
  • LOL-STATUS-V3
    • LOL-STATUS-V4의 이전 버전 API (2020년 12월 11일까지 제공하였음)
  • LOL-STATUS-V4
    • 현 플랫폼의 정보(Window, mac, android, ios 등)를 반환 (+지역별 업데이트가 필요한지를 체크)
  • MATCH-V4
    • 특정 게임에 대한 모든 게임정보(게임 내용과 관련된 200가지 항목)들을 반환 (2021년 8월 23일 까지만 제공 이후에는 MATCH-V5로 확인)
  • MATCH-V5
    • 특정 게임에 대한 모든 게임정보(게임 내용과 관련된 200가지 항목)들을 반환
  • SPECTATOR-V4
    • 해당 유저(검색 대상)가 진행중인 게임정보를 반환
  • SUMMONER-V4
    • 해당 유저(검색 대상)의 정보를 반환
    • Riot API를 쓰기 위해서는 account id, puuid 등이 필요한데 여기서 확인 가능
  • THIRD-PARTY-CODE-V4
    • 해당 유저(검색 대상)를 통하여 third party code를 반환
  • TOURNAMENT-STUB-V4
    • 롤드컵과 같은 토너먼트와 관련된 API이며 production key로만 접근 가능
  • TOURNAMENT-V4
    • 롤드컵과 같은 토너먼트와 관련된 API이며 production key로만 접근 가능

 

 

다음 포스팅에서는 분석에 필요한 4가지 API(LEAGUE-EXP-V4, LEAGUE-V4, MATCH-V5, SUMMONER-V4) 에 대해서 자세히 살펴보도록 하겠습니다.

 

반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 준비하기  (0) 2021.07.20
프로젝트 개요  (0) 2021.07.20

Riot에서 제공하는 API Key는 크게 두가지가 있습니다.

하나는 API를 이용하여 웹/앱 어플리케이션을 만드는 Production API Key와

단순 연구 및 개발 용도로 사용하는 Personal API Key 입니다.

 

Riot 계정만 있다면 누구나 Personal API Key를 발급 받을 수 있지만, Production API Key는 Riot API를 활용한 결과물(웹/앱)이 있어야 하고, 그 결과물을 Riot이 검토한 후, 승인이 나야지만 발급 받을 수 있습니다.

 

그렇기 때문에, 처음 개발을 하실 때는, Personal Key를 발급 받고 사용하셔야 합니다.

 

Riot Personal API Key를 사용하기 위해서는 먼저, 밑에 URL에 들어가신 후,

 

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

Riot 계정(LOL 계정)이 있으신 분들은 상단 위 Login(로그인)을 하시면되고, 없으신 분들은 SIGN UP(회원가입)을 하셔야 합니다. 

 

(없으신 분들은 만드시고, 있으신 분들은 계정을 입력 후) 로그인을 하시면 해당 창으로 넘어갑니다.

(안넘어 가신 분들은, https://developer.riotgames.com/ 직접 타고 들어가시면 됩니다.)

 

해당키를 Copy 하시고, 메모장에 잘 저장시켜두세요!

 

그러면, Personal API키 발급은 완료되었습니다.

 

참고로, 키 만료일이 있으니 참고하시고 만료되면, 위 과정을 반복하여 새로 발급 받으셔야 합니다.

 

(Personal API키라 할지라도, 개발 및 학습 용도로 사용을 한다고 Riot에 요청을 하게 되면, 만료일을 더 늦출 수 있습니다. 그러나 호출 제한(1초 : 20번, 2분 : 100번)은 동일)

 

API를 호출할 때, 1초에 최대 20번, 2분에 100번까지만 호출만 가능합니다. (그 이상으로 호출하게 되면, API 키가 일시적으로 BLOCK 당하고 지속적으로 호출하게 되면, API 및 개발자 계정이 BLOCK 당할 수 있습니다.)

 

그렇기 때문에, 개발시에는 안전하게 1초에 19번, 2분에 99번까지만 호출을 거는 것이 안전할 것 같습니다.

반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20
프로젝트 개요  (0) 2021.07.20

(작성중...)

반응형

'Data Science > LOL 프로젝트' 카테고리의 다른 글

Riot API (LEAGUE-V4) 코드 구현  (0) 2021.07.26
Riot API (SUMMONER-V4) 코드 구현  (0) 2021.07.25
Riot API 사용하기 (웹사이트)  (0) 2021.07.25
Riot API 살펴보기  (0) 2021.07.20
Riot API 준비하기  (0) 2021.07.20

Opne CV, 오픈 소스로 컴퓨터 비전과 머신러닝을 할 수 있는 소프트웨어 라이브러리입니다.

많은 사람들이 컴퓨터 비전을 할 때, OpenCV를 사용하는 이유는 BSD license를 가지고 있어서입니다..

 

BSD license, 학교에서 교육용이나 회사의 상업적인 목적으로도 사용이 가능한 라이선스입니다.

또한, opencvcc++ 형태로 개발이 되지만 파이썬이나, 자바 등에서도 사용이 가능합니다.

 

마지막으로, CPU뿐만 아니라 멀티코어 프로세싱, 쿠다 환경 등을 기본적으로 제공하므로 여러분들 pc에 이런 환경이 구축되어 있다면 별도 설치 없이, 더욱 빠르고 효율적으로 동작이 됩니다..

 

저는 실습 환경을 파이참으로 진행할 예정이구요!

비주얼 스튜디오나 아나콘다가 편하신 분들은 비쥬얼 스튜디오나 아나콘다를 사용하셔도 괜찮습니다.

 

다만 구글 코랩이나 쥬피터 환경에서는 일부 윈도우 기능에 제약이 있기 때문에,

파이참이나 비주얼 스튜디오 등 비 온라인 IDE 환경을 추천 드립니다.

 

실습 과제는, 블로그 에 <OpenCV 실습>에 곳에 정리를 해두었구요,

필요한 영상 파일 들을 다운로드하거나 여러분이 가지고 있는 영상 파일들을 통해서

같이 실습을 해보는 것을 추천드립니다.

 

파이썬 opencv 라이브러리 설치는 다음과 같습니다.

pip install opencv-python

 

OpnCV 학습에 도움되는 두 사이트들을 소개해드리도록 하겠습니다.

 

1. https://docs.opencv.org/master/

해당 사이트는, open cv 공식 문서입니다.

 

2. https://github.com/sunkyoo/opencv4cvml/tree/master/python

해당 사이트는, 제가 open cv를 학습하였던 서적에 관련된 github입니다.

반응형

이번에 알아볼 것은, 영상 파일 형식의 특징입니다.

우리가 흔히 사용하는 파일 형식 4가지를 정리해보았습니다..

 

1. BMP 형식

 

첫째로, bmp 포멧인데요.. bmp 포멧은 전혀 압축을 하지 않고 저장합니다.

그렇기 때문에 손실률이 적고 파일 구조가 단순하다는 장점이 있지만,

파일 용량이 다른 포맷에 비하여 크다는 단점이 있습니다.

그래서 이런 용량이 큰 단점을 해결하기 위해 우리는 jpg 형식을 주로 사용합니다.

 

2. JPG 형식

우리가 스마트 폰이나 디지털카메라로 사진을 저장하면 jpg로 저장되어있는 것을 확인하실 수 있습니다.

jpg 파일은 용량을 줄이기 위해 손실 압축이 일어나는데요..

손실 압축이란 픽셀값을 조금씩 바꾸어서 용량을 줄여 주는 것입니다.

 

예로 들어 비슷한 색상들을 하나로 묶어서 표현하는 것인데요...

이러한 변화는 사람의 육안으로는 구분이 안되어 지기 때문에 전혀 문제가 없어 보일 수는 있겠지만…

 

픽셀 값이 조금 바뀌는 것 때문에 컴퓨터 비전분야에서는

연산처리하는 과정에 따라 결과 값이 달라질 수 있다는 단점이 있습니다.

 

3. GIF 형식

gif 파일은 여러분들이 잘 아시다시피, 이미지 파일인데 움직인다...?

그러면 대부분 gif 파일일 것입니다...

 

컴퓨터 비저닝 분야에서는 거의 사용하지 않습니다.

왜냐하면, gif 파일은 트루컬러 표현을 할 수가 없기 떄문 입니다.

이 파일들은. 단순하게 256 컬러보다 작은 숫자만으로 표현되고 있구요...

 

인터넷 상에서 움직이는 짤, 즉 재미를 위한 움짤로만 표현을 하고 있다고 생각하시면 됩니다.

 

4. PNG 형식

마지막으로 알아볼 png파일은 bmp 파일과 jpg 파일의 중간 정도로 이해하시면 될것 같습니다.

bmp 파일은 압축을 안 하니 파일 용량이 너무 크고...

jpg 파일은 용량을 줄이지만 손실 압축을 하는 단점을 보완하는 파일입니다.

 

그래서 png 파일은 압축을 하되 손실이 없는 무손실 압축을 하여 파일 크기를 줄여 주는 것입니다.

 

또한, 이미지 처리를 편하게 할 수 있는 투명도를 나타내는 알파 채널(배경이 없고 투명한 형태)을 지원해주기 때문에!

컴퓨터 비저닝에서는 많이 사용되는 파일 포맷입니다.

반응형

'AI > OpenCV' 카테고리의 다른 글

Open CV란?  (0) 2021.01.02
영상(image) 표현 방법  (0) 2021.01.02
영상(image)이란?  (0) 2021.01.02
컴퓨터 비전(Computer Vision) 관련 응용 분야(2)  (0) 2021.01.02
컴퓨터 비전(Computer Vision) 관련 응용 분야(1)  (0) 2021.01.02

+ Recent posts