이제 홈에서 소환사명을 검색하면 사용자에 대한 정보를 보여주는 UI를 구현했다. (전적을 제외한)

 

사용자에 대한 점수에 대한 응답은 /lol/league/v4/entries/by-summoner/{id}로 보내야 한다. 요청을 보내면 id에 맞는 유저에 대한 정보를 반환해준다. 

 

Riot API에서 보내는 Response는 아래와 같이 Json으로 반환된다. Json 하나가 아닌 여러 List가 반환되는 모습을 볼 수 있다.

body : [{"leagueId":"b5fddebe-1f9e-4e78-b1b3-51c2eb225f65","queueType":"RANKED_SOLO_5x5","tier":"DIAMOND","rank":"III","summonerId":"1E4fn0-sxfubUx4bvU1ybhLtggI2C3-vnGl5jX9ijSzXBQ","summonerName":"Hide on bush","leaguePoints":30,"wins":6,"losses":6,"veteran":false,"inactive":false,"freshBlood":false,"hotStreak":false},{"queueType":"CHERRY","summonerId":"1E4fn0-sxfubUx4bvU1ybhLtggI2C3-vnGl5jX9ijSzXBQ","summonerName":"Hide on bush","leaguePoints":0,"wins":29,"losses":11,"veteran":false,"inactive":false,"freshBlood":true,"hotStreak":true}]

나는 해당 리스트에서 queueType이 RANKED_SOLO_5x5인 Json만 반환해주려고 한다.

 

코드는 아래와 같다.

    @GetMapping(path = "/summoners/kr/byId/{id}")
    public ResponseEntity<LeagueEntry> findUserInformationByUserId(@PathVariable(name = "id") String id) {
        try {
            String requestUrl = riotUrl + "/lol/league/v4/entries/by-summoner/" + id;
            HttpGet httpGet = new HttpGet(requestUrl);

            httpGet.addHeader("User-Agent", "Mozilla/5.0");
            httpGet.addHeader("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7");
            httpGet.addHeader("Accept-Charset", "application/x-www-form-urlencoded; charset=UTF-8");
            httpGet.addHeader("Origin", "https://developer.riotgames.com");
            httpGet.addHeader("X-Riot-Token", riotApiKey);

            CloseableHttpClient httpClient = HttpClientBuilder.create().build();
            CloseableHttpResponse response = httpClient.execute(httpGet);

            if (response.getStatusLine().getStatusCode() == 200) {
                ResponseHandler<String> handler = new BasicResponseHandler();
                String body = handler.handleResponse(response);
                log.info("body : " + body);

                JSONParser parser = new JSONParser();
                JSONArray jsonArray = (JSONArray) parser.parse(body);

                for (Object obj : jsonArray) {
                    JSONObject jsonObject = (JSONObject) obj;
                    if (jsonObject.get("queueType").equals("RANKED_SOLO_5x5")) {
                        LeagueEntry leagueEntry = new LeagueEntry(jsonObject);
                        return ResponseEntity.ok(leagueEntry);
                    }
                }

                // "queueType":"RANKED_SOLO_5x5"에 해당하는 JSON 객체가 없는 경우 404 에러를 반환합니다.
                return ResponseEntity.notFound().build();
            } else {
                log.error("response is error : " + response.getStatusLine().getStatusCode());
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }

 

테스트

페이커 전적 검색

결과적으로 icon, 소환사 닉네임, 레벨, 랭크 icon, 점수 등 다양한 정보를 받아와 적절하게 배치하였다.

 

 

남은 일정

- 전적 기록 가져오기

- 전적기록 UI 구현

- 전적 갱신 구현

- DB 구현

- 캐시 구현

 


번외

8월 1일 오전에 Naver D2에서 온 메일에 메모이제이션이라는 기술에 대한 설명을 잠깐 봤는데, OP.GG라는 전적검색 사이트는 한 유저가 여러 소환사를 검색하기보다는 일정한 특정 소환사를 자주 검색할 것 같다는 생각이 들었다. 이것이 내가 캐시를 구현하려는 이유인데, 남은 일정을 완료한 다음 메모이제이션을 공부해본 다음 적용해보면 좋을 것 같다.

+ Recent posts