DUO.LOL Clone Coding

Coaspe·2021년 8월 29일
0

DUO.LOL

목록 보기
1/1

시작

League Of Legend API를 이용해 모스트 3 챔피언과 해당 챔피언의 승률을 뽑아내는 기능을 만들려고 했으나 전적의 기록이 3개월 전 까지 밖에 불러와지지 않는 상황이다.

-> API Version 5의 문제가 있는 모양이다. Version 4에서는 잘 작동한다.

약 400개 가량의 데이터를 Promise all로 axios.get을 시도하였는데 서버에서 한 번에 시도 할 수 있는 쿼리의 양이 1초에 20개,2분에 100개로 제한해놓았다. 그래서 현재 문제를 겪고 있다.

-> Promise all은 병렬적으로 처리하기 때문에 timeout을 이용 할 수 없다.

여러가지 방법을 시도했다.
1. op.gg의 해당 소환사의 url로 html정보를 가져와 정보들을 처리할려했으나 javascript에서는 load되지 않은 페이지의 html정보를 가져올 수 없다고 한다.
2. selenium을 이용하려 했으나 과정이 너무 지저분해진다.

-> setTimeout과 Promise.all을 적당히 사용하여 해결하였다.(matchesInfo 배열에는 각각 20개의 matchId가 들어있다. matchesInfo에 map을 사용하여 20개의 데이터를 하나의 묶음으로 처리했고 index가 5의 배수일 때는 120.1초를 시간 변수에 더해주고 아닐 때는 1.1초를 더해서 setTimeout을 하였다.)

V4 match API Issue

V4 match API가 9월 13일 이후로 deprecated 되었다. 그래서 그 이후의 match data를 요청하면 이상한 데이터가 오거나 제대로 전송되지 않는 데이터가 발생한다.

그리고 V5 match API는 2021 6월 16일 이전의 데이터는 가져오지 못한다.
그렇다면 13시즌 시작일 ~ 6월16일은 V4 matchAPI를 이용해서, 6월 16일 ~ 현재까지는 V5 matchAPI를 이용해서 matchID를 가져와야 한다.

그런데 API를 요청할 때 beginTimeendTime이 둘다 명시되어 있으면 그 둘의 차이가 1주일을 넘어서는 안 된다고 한다. (넘기면 404 error가 발생한다.)

그 말은 V4 match API를 사용할 때는 1주일 단위로 matchID query요청을 보내야 한다는 말이다. 정말 귀찮다

그리고 정말 이상한 게 1주일 단위로 query 요청을 보낼 때 그 기간에 플레이한 게임이 없으면 빈 배열이 반환되는 게 아니라 404 error가 발생한다. 1주일 단위가 아니면 200 response에 빈 배열이 반환된다. 정말 요상하다.

그래서 어떤 과정으로 해야하나

13시즌 시작일 ~ 6월16일은 V4 matchAPI를 이용해서, 6월 16일 ~ 현재까지는 V5 matchAPI를 이용해서 matchID를 가져와서 합친다. 그 후 matchInfo에 대한 query를 20개씩 보낸다.

OP.GG 에서 원래 조기 서렌은 통계로 집계하지 않았는데 갑자기 집계하도록 바뀌었다

API가 너무 지 멋대로다

V4가 완전히 deprecated 되면서 모든 데이터를 V5로 받아와야 한다. V5는 startTime을 명시하면 2021년 6월 16일 이전의 데이터는 불러올 수 없다. 하지만 startTime을 명시하지 않으면 이전의 데이터도 불러올 수 있다. 하지만 여기서 더 큰 문제가 있다. startTime을 명시하지 않으면 어떤 데이터가 나올것 같나? 당연히 가장 최근의 데이터부터 가장 오래된 데이터까지 나온다고 생각할 것이다. 하지만 어느 계정은 2021년 1월까지만 나오고 어느 계정은 6월 까지만나오고 기준이 없다. 이상하다. 라이엇은 API 개발에 힘을 더 써야할 것 같다. 너무 부정확해서 개발이 불가능할 정도이다.

profile
https://github.com/Coaspe

0개의 댓글