제쿵
작은 책방
제쿵
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • SideProject (3)
    • Diary (1)
    • Algorithm (1)
    • Smarteer Suppoters (15)
      • Project (5)
      • Study (7)
      • Journal (3)
    • Fish (11)
    • Guitar (1)

블로그 메뉴

  • 홈

공지사항

인기 글

hELLO · Designed By 정상우.
제쿵

작은 책방

롤 전적 사이트 만들기 - RIOT API #2
SideProject

롤 전적 사이트 만들기 - RIOT API #2

2023. 3. 23. 23:18

최근 게임 10게임

https://15gg.info/

 

15GG

 

15gg.info

 

 

매치 데이터를 매치 ID값에 대해서 가져오기 때문에 , 게임 정보가 중심이 된다.

유저 중심으로 나오지 않는다.

해당 유저가 어느팀에 있는지 판별한 후, 그 팀의 승패 유무를 알아야했다.

 

버전 정보 - 이미지를 주소 대상으로 가져올때 버전이 필요하다.

https://ddragon.leagueoflegends.com/api/versions.json

1. 표시할 정보가 정말 많았다.

페이지에서 사용할 객체들을 정리했다.

더보기

MATCHDATA_TYPE

export interface IMatchInfo {
    gameDuration: number,
    gameEndTimestamp: number,
    gameMode: string,
    participants: IParticipants[],
    teams: ITeams[]
    queueId: number
}

export interface IParticipants {
    summonerId: string,
    kills: number,
    deaths: number,
    assists: number,
    champLevel: number,
    championId: number,
    championName: string,
    totalDamageDealtToChampions: number,
    wardsKilled: number,
    wardsPlaced: number
    summonerName: string,
    summonerLevel: string,
    visionWardsBoughtInGame: number,
    totalMinionsKilled: number,
    summoner1Id: number,
    summoner2Id: number,
    win: boolean,
    item0: number,
    item1: number,
    item2: number,
    item3: number,
    item4: number,
    item5: number,
    item6: number,
    perks: IPerks
}

interface IPerks {
    styles: IPerks_Style[]
}

interface IPerks_Style {
    description: string,
    selections: IPerk[]
}

interface IPerk {
    perk: number,
    var1: number
    var2: number
    var3: number
}

export interface ITeams {
    bans: IBans[]
    objectives: IObjectives
    win: boolean
}

interface IBans {
    championId: number,
}

interface IObjectives {
    champion: {
        kills: number
    }
}

export interface IDevidedTeam {
    team1: IParticipants[],
    team2: IParticipants[]
}

 

2.  커스텀해야하는 데이터가 있다.

  RIOT에서 제공해주는 json들을 참고했다.

 

1. 주룬, 부룬

https://ddragon.canisback.com/img/perk-images/Styles/

이와같은 주룬과 부룬, 주룬에 대해서는  ID값 그대로 이미지를 넣어 주면 그만이지만

부룬의 경우 ID값 그대로 넣어주면 상세 룬 이미지가 박혔다.

따라서 8200번 일 경우, 앞에 2번째 자리만 추출 , 82, 따로 분류해줘서 포괄적인 부룬을 표시했다.

예외적으로 정밀 룬이었나, 앞자리수 2개가 같지 않은 경우가 있었다. 예외 처리를 해줬다.

 

 

2. 랭크 타입

매치데이터에 QueueType이 담겨서 온다. 이것으로 게임 종류를 판별한다.

구글링하다가 잘 정리해둔게 있어서, 변형해서 사용했다.

더보기

QUEUE_TYPE

export const QUEUETYPE: any = {
  400: "norm", //Normal Draft Pick
  420: "solo",
  430: "norm",
  440: "flex",
  450: "aram",
  700: "clash",
  800: "ai", // Deprecated
  810: "ai", // Deprecated
  820: "ai", // Deprecated
  830: "ai",
  840: "ai",
  850: "ai",
  900: "urf",
  920: "poro",
  1020: "ofa",
  1300: "nbg",
  1400: "usb", // Ultimate Spellbook
  2000: "tut",
  2010: "tut",
  2020: "tut",
};

export const ko: any = {
  solo: "솔랭",
  norm: "일반",
  aram: "칼바람",
  flex: "자랭",
  nbg: "돌넥",
  usb: "궁주문서",
  urf: "URF",
  ofa: "단일",
  ai: "AI대전",
  poro: "포로왕",
  tut: "튜토리얼",
  etc: "기타",
  clash: "격전",
};

3. 스펠

http://ddragon.leagueoflegends.com/cdn/13.5.1/data/ko_KR/summoner.json

스펠 또한 마찬가지

더보기

SPELL_TYPE

export const SPELLTYPE: any = {
  1: "SummonerBoost",
  3: "SummonerExhaust",
  4: "SummonerFlash",
  6: "SummonerHaste",
  7: "SummonerHeal",
  11: "SummonerSmite",
  12: "SummonerTeleport",
  13: "SummonerMana",
  14: "SummonerDot",
  21: "SummonerBarrier",
  30: "SummonerPoroRecall",
  31: "SummonerPoroThrow",
  32: "SummonerSnowball",
  39: "SummonerSnowURFSnowball_Mark",
  54: "Summoner_UltBookPlaceholder",
  55: "Summoner_UltBookSmitePlaceholder",
};

 

3.  로컬 이미지 활용

서버 올리고 돌려봤는데 너무 느렸다.

이미지를 다른 사이트에 호출해서 가져와서 뿌려주고 있었다.

퍼즐 조각 하나하나 맞추듯이 추가되니까 보기 싫어서 로컬에 전부 저장했다.

 

이미지는 여기서 받을 수 있다.

https://developer.riotgames.com/docs/lol

 

 

4.  하고 싶은거

검색 페이지 로드 할때마다 api가

유저 네임 대상 검색 - 1회

유저 랭크 점수 검색 - 1회

유저 최근 0~100 게임 검색 - 1회

유저 최근 게임 ID 대상 검색 - 10회

13회 이다.

 

게임 상세 보기는 구현 안되어있지만 한다고하면 소환자 별 랭크도 볼수있게하고 싶다.

그렇다면 게임 1개 당 개개인에 대해서 랭크 점수를 조회해야하는데 고유한 소환사ID값이 필요하다.

소환사 이름 대상으로 지정할 수없으니, 각각에 소환사 정보에 대해 호출하고 소환사ID값으로

랭크 점수를 호출한다.

1게임 = 10명( 소환사ID추출 ) + 10번( 소환사 랭크점수 추출 ) 20번 호출이다.

한페이지에 10게임을 보여준다면 10 * 20 = 200번 호출한다.

 

그렇다면 DB가 필요할 것 같다.

1. 최초 검색 시 소환사, 게임에 대해 저장

2. 나중에 같은 값으로 호출이 들어올때 해당 데이터가 DB에 존재하면 출력, 아니면 api 호출하여 DB에 저장

 

db 구축하고 저장하는 식으로 구현한다면 재밌을 것 같다.

 

찾아보니까

각 포지션 동선에 대한 정보들도 제공해주던데 이런 데이터들을 많이 제공해준다.

사이트에서 활용하기 나름인 것 같다.

 

#마주한 문제점들

 nginx, 도메인 설정

EC2에서 amazone linux 2023 사용했다.

SSL인증하는데 certbot을 깔 방법이 없었다.

다른 패키지 툴로 깔려고 시도했는데 해내지 못했다.

 

apt-get도 안된다.

yum 밖에 사용하지 못하고 yum으론 아무것도 할 수가 없었다.

git - amazone linux 2023에 pip로 설치하면 된다는 말이 있어서 따라해봤다.

안된다. 의존성에서 문제가 생기는 것 같다. 

 

certbot 패키지를 추가해 달라는 티켓이 있는거 보니까

나랑 비슷한 사람이 있는 것 같다.

 

ubuntu로 인스턴스 다시 생성해서 진행했다.

 

Filezila

이미지를 로컬에 저장해야해서 tar로 압축하고 filezila로 넘겨야했다.

 

갑자기 드래그가 안됐다. 권한 문제인줄 알고 chmod 명령어

파일질라 폴더 우클릭 - F 파일 속성 777설정 이것 저것했는데 소용없었다.

https://koreaparks.tistory.com/144

이거 보고 해결했다.

'SideProject' 카테고리의 다른 글
  • [AWS ec2] nextjs run build 멈춤
  • 롤 전적 사이트 만들기 - RIOT API #1
제쿵
제쿵
한 색은 갑자기 다른 색을 비춘다.

티스토리툴바