프로젝트/Riot LoL

소환사이름으로 MatchId 저장하기

SigmoidFunction 2021. 8. 4. 10:25
728x90

내가 하는 이번 프로젝트에서는 승리예측이 될지 피드백이 될지는 아직 확정되지 않았으나

 

적어도 브론즈, 실버, 골드를 위한 모델을 제작하려고 한다.

 

솔직히 롤 좀 해본 사람은 알거다.

 

소위 말하는 천상계

 

즉, 챌린저, 그랜드마스터, 마스터 유저들의 데이터를 잘 정리해주는 곳은 많긴 한데

 

그걸 내가 하면 잘 안된다...실력이 좋으면 모를까

 

어쨌든 난 가장 유저가 가장 많이 분포되어 있는 브실골을 위한 모델을 만들것이다!!

 

브실골 유저가 84%

 

사실 인터넷에서 농담으로 벌레티넘 벌레티넘하지만

 

실제로 플레티넘이면 꽤나 실력이 좋은 유저들이다.

 

현실적으로 게임을 참고하고 적용하기도 좋다고 생각하여

 

플레티넘 유저들을 대상으로 데이터를 수집할 것이다.

 

 

그중에서도 1,2,3티어의 유저들

 

4티어는 '주차'라는 형태로 더이상 게임을 즐기지 않는 사람도 있고 워낙 변동성이 강하기 때문에

 

4티어는 제외하였다.

 

이전에 포스팅한 글에서 플레티넘 유저들의 정보를 불러올 수 있었다.

 

문제는 유저들이 엄청나게 많다는 것이다.

 

난 그래서 1,2,3티어에서 승패의 합이 많은

 

즉 랭크게임 횟수가 가장 많은 순서대로 5000명을 추려내었다.

 

대충 이런식으로 csv파일로 저장되었다.

 

 

이제 이 유저들의 게임 정보를 수집하기 전에 해야할 것이 있다.

 

게임 정보를 수집하기 위해서는 MatchId라는 것이 필요하다.

 

특정 게임의 정보를 불러올 수 있는 아이디?같은 거라고 보면 된다.

 

RiotAPI에서 match-v4는 8월 23일즈음에 서비스를 종료할 것이라고 하기 때문에

match-v5를 이용하려 한다.

 

 

유저의 puuid를 입력하면 matchid가 나오고 그 matchid를 아래에 넣으면 인게임 정보가 뜬다!

 

 

여기서 주의사항

puuid는 api key가 바뀌면 매번 바뀐다.

 

난 데이터를 오랫동안 가져와야해서 puuid가 계속 바뀔 가능성이 있었기 때문에

 

소환사닉네임으로 puuid 를 가져오기로 했다.

 

문제는 닉변해서 닉네임이 바뀐 경우지만.. 그 경우는 제외하기로 결정했다. 어쩔 수 없지

 

여기에 넣어주면 puuid가 나오기 때문에 그 puuid를 곧바로 match-v5에 넣어서 matchid리스트를 저장할 거다!

 

1명당 300경기를 저장할 거다

 

이론상 45만개의 matchid

ㅎㄷㄷ

 

 

import requests
import pprint
import pandas as pd
import datetime
import csv
import time

pp = pprint.PrettyPrinter(indent=4)
api_key = 'api키입력'
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-KR,ko;q=0.9,en-US;q=0.8,en;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 get_match_id(puuid) :
    f = open('MatchId_data.csv', 'a', newline='')
    wr = csv.writer(f)
    for k in [0,100,200] :
        time.sleep(2)
        match_data = match_v5_get_list_match_id(puuid, k, 100)
        for i in match_data :
            wr.writerow([i])


sumname = pd.read_csv('D:/project_files/platinum_15000user.csv',encoding='cp949')
# print(league_df['summonerName'])
sumname=sumname['summonerName']
i = 1
error_list = []
for s_name in sumname :
    try:
        print(s_name, i)
        summoner_url = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{s_name}"
        summoner_info = requests.get(summoner_url, headers=request_header)
        if summoner_info.status_code != 200:
            raise ValueError
        summoner_info = summoner_info.json()
        summoner_puuid = summoner_info['puuid']
        time.sleep(1)
        get_match_id(summoner_puuid)
        # if puuid.status_code==404 :
        #     raise ValueError
#         final_reulst.append(puuid)
#         time.sleep(1)
    except :
        print('제외됨')
        error_list.append(i)

    i += 1

print(error_list)

이 코드로 수집하기로 했다.

 

 

 

 

 

 

설명하자면

 

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 get_match_id(puuid) :
    f = open('MatchId_data.csv', 'a', newline='')
    wr = csv.writer(f)
    for k in [0,100,200] :
        time.sleep(2)
        match_data = match_v5_get_list_match_id(puuid, k, 100)
        for i in match_data :
            wr.writerow([i])

이 두 함수는 start와 count를 0, 100으로 하면 가장 최근것부터 100개의 게임매치아이디를 가져온다.

 

100, 200하면 그다음 100개 

 

이런식으로 start를 조절해서 매치아이디를 가져온다.

 

get_match_id 함수에선 이 매치아이디들을 적고 저장한다.

 

 

그리고 본 코드에서는 정상응답 200이 안뜰경우 에러를 띄우기로 하였다.

 

인게임 데이터는 이제 이후에 수집할 것이다.

 

 

728x90