관리 메뉴

LC Studio

11명의 선수 포지션별로 불러오기(FIFAONLINE RandomSquadMaker #2) 본문

프로젝트/FIFAONLINE4 RandomSquadMaker

11명의 선수 포지션별로 불러오기(FIFAONLINE RandomSquadMaker #2)

Leopard Cat 2022. 5. 24. 16:25

서론

목표한 RandomSquadMaker을 만들기 위해선 크게 3가지 과정을 해내야 한다.

 

1. Random한 선수 데이터 불러오기

2. "포지션"별 Random한 선수 데이터 불러오기

3. "시즌"별 Random한 선수 데이터 불러오기

 

이번에는 "포지션"별 Random한 선수 데이터 불러오기 부분을 해보겠다.


본론

지난 시간 랜덤으로 11명의 선수를 불러오는 것을 구현했다.

그 코드에서 몇가지를 추가하여 완성했다.

 

1. 크롤링

Nexon Open Api에서는 포지션 정보를 제공하여 주지만, 선수 고유의 spid와의 연결점이 없었다.

예를 들자면 

 {
        "id": 317178194,
        "name": "딘 콕스"
 }

위와 같은 선수 spid 정보가 있고,

{
        "spposition": 0,
        "desc": "GK"
},
{
        "spposition": 1,
        "desc": "SW"
},
{
        "spposition": 2,
        "desc": "RWB"
},
{
        "spposition": 3,
        "desc": "RB"
}

위와같은 포지션 정보가 있다.

선수 spid 안에 포지션 정보가 없어, 곤란한 상황이었다.

 

그래서 크롤링을 통해 웹에서 선수의 포메이션 정보를 가져왔다.

크롤링 부분은 자세히 설명 못드리는 점 양해부탁드린다. 

아래와 같이 url에서 정보를 가져왔다.

public static void start() {
        
        String url = "url";

        Document doc = null;
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException e) {
            e.printStackTrace();
        }

        assert doc != null;

        //포지션 정보
        Elements infoLine = doc.getElementsByAttributeValue("class", "class 이름");
        Elements positionLine = infoLine.select("span");
        Element positionData = positionLine.get(1);
        position =  positionData.text();

 

2. 포지션 탐색

크롤링을 통해 가져온 포지션 정보를 활용해 각 포지션에 적합한 선수를 탐색했다.

4-3-3 포메이션이 기본인 형태이다.

각 포지션별로 해당하는 선수가 나올때까지 재귀호출을 해준다.

if(i == 0){
    if(!(Crawl.position.equals("GK"))){
        makeRandom(i);
        break;
    }
}
if(i == 1 || i == 4){
    if(!(Crawl.position.equals("LB")||Crawl.position.equals("LWB")||Crawl.position.equals("RB")||Crawl.position.equals("RWB"))){
        makeRandom(i);
        break;
    }
}
if(i == 2 || i == 3){
    if(!(Crawl.position.equals("CB")||Crawl.position.equals("SW")||Crawl.position.equals("LCB")||Crawl.position.equals("RCB"))){
        makeRandom(i);
        break;
    }
}
if(i == 5){
    if(!(Crawl.position.equals("CM")||Crawl.position.equals("CDM"))){
        makeRandom(i);
        break;
    }
}
if(i == 6 || i == 7){
    if(!(Crawl.position.equals("CM")||Crawl.position.equals("CAM")||Crawl.position.equals("RM")||Crawl.position.equals("LM"))){
        makeRandom(i);
        break;
    }
}
if(i == 8 || i == 10){
    if(!(Crawl.position.equals("LW")||Crawl.position.equals("RW"))){
        makeRandom(i);
        break;
    }
}
if(i == 9){
    if(!(Crawl.position.equals("ST")||Crawl.position.equals("CF"))){
        makeRandom(i);
        break;
    }
}

결론

 

작동 동영상 시간이 오래 걸린다

각 포지션에 맞는 선수를 불러오는데 성공했다.

오늘도 몇가지 문제가 있다.

 

- 소요되는 시간

우선 탐색하는 시간이 너무 길어, 한 선수당 기본 10초는 걸린다.

운이 좋으면 3초 나쁘면 최대 30초까지 걸리는 것 같다. 

- 중복처리

같은 선수가 뽑히는 경우, 다른 시즌 같은 이름의 선수가 뽑히는 경우를 제거해야한다.

 

이 외에도 자잘한 문제점들이 있다.

일단 큰 틀을 완성하고 하나씩 업데이트하는 방식으로 해결할 계획이다.

 

 

 

 

반응형