오늘은 최근 전적 검색을 구현하고 소환사 정보 관리 방식을 변경했다.
소환사 정보가 필요할 때마다 초기화 함수에 추가하는 것이 번거롭다고 생각되어 아예 소환사 정보 전체를 속성에 저장하기로 했다.
def __init__(self, s_name):
self.api_key = '내 api key'
self.get_summoner_information(s_name)
self.make_champion_name_key_dict()
self.page = 0
self.match_page = {}
self.match_info_dict = {}
def get_summoner_information(self, name):
URL = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + name
res = req.get(URL, headers = {'X-Riot-Token': self.api_key})
print(res.status_code)
if res.status_code == 200:
self.valid_name = 1
resobj = json.loads(res.text)
self.summoner_info = resobj
else:
self.valid_name = 0
print('No such summoner')
그 후에 이젠 전적 검색을 구현해야 했다.
def get_match_list(self, start, count=20):
URL = 'https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/' + self.summoner_info['puuid'] + '/ids?start=' + str(start) + '&count=' + str(count)
res = req.get(URL, headers = {'X-Riot-Token': self.api_key})
if res.status_code == 200:
self.match_list = json.loads(res.text)
else:
print('No Match Found')
Riot API에서 소환사 puuid를 이용해서 최근 게임들의 match_id를 가져온다.
여기서 잘못했던 부분이 있는데 api에 return value가 list라고 되어 있어서 그냥 res.text로 받으면 되겠지 했었는데 이렇게 받으면 그냥 문자열로 받아서 아래에서 반복문을 사용할 때 문제가 생겼었다.
그래서 json.loads()를 사용해서 정상적으로 받고나서 진행할 수 있었다.
이렇게 match_list라는 속성에 match id들을 보관한다.
def get_match_information(self): # memorization을 활용하여 전 페이지로 이동시 추가 요청을 하지 않도록 추가할 것 / 11월 11일의 TIL 확인
self.get_match_list(self.page)
for i in tqdm(self.match_list):
URL = 'https://asia.api.riotgames.com/lol/match/v5/matches/' + i
res = req.get(URL, headers = {'X-Riot-Token': self.api_key})
resobj = json.loads(res.text)
self.match_info_dict[i] = resobj
# 나중에 gui 구성할 때 페이지로 정보 저장해서 memorization 활용
# self.match_page[self.page] = self.match_info_dict
cnt = 0
for i in self.match_list:
print(f'''
{cnt + 1}번째 판
게임모드 : {self.match_info_dict[i]["info"]["gameMode"]}
게임시간 : {str(round(self.match_info_dict[i]["info"]["gameDuration"] / 60, 2)) + "분"}
게임승패 : {"승리" if self.match_info_dict[i]["info"]["teams"][0]["win"] == True else "패배"}
''')
cnt += 1
일단은 가져온 match_list의 match id를 사용해서 해당 게임의 정보를 가져온다.
가져오고 match id를 key로, 게임 정보를 value로 해서 관리한다.
그리고 지금은 간단하게 게임모드, 게임시간, 게임승패 정도만 출력하게 해뒀다.
나중에 GUI 환경에서 구현할 때는 memorization을 활용하여 이전 페이지로 이동할 때 무의미하게 추가적으로 요청을 보내는 일을 막는 것도 생각해야 할 것이다.
아마 페이지 수를 key로, match_info_dict를 value로 놓고 관리하게 될 것 같다.