일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 랜덤
- 바이트디그리
- 홈CCTV
- 안녕 디지몬
- 스쿼드 메이커
- fifaonline
- 랜덤스쿼드
- 부르지마세요
- 불끌때
- 자바 인강
- fifaonline4
- 안드로이드#앱만들기#알바
- 아두이노#작품#사료급식기
- #FIFAONLINE4
- 박스#강아지집#만들기
- 강아지 #박스집 #복층
- 독서감상문
- Ai
- 강아지 스마트 펜스
- Java & SpringBoot로 시작하는 웹 프로그래밍
- K디지털크레딧
- 부의감각
- 안드로이드 그림판#그림메모장#낙서장
- 패스트캠퍼스
- D-ID
- 안드로이드 #앱개발#계산기
- 피온4
- 안드로이드
- 혼술 술자리 인싸앱
- 내일배움카드
- Today
- Total
LC Studio
11명의 선수 포지션별로 불러오기(FIFAONLINE RandomSquadMaker #2) 본문
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초까지 걸리는 것 같다.
- 중복처리
같은 선수가 뽑히는 경우, 다른 시즌 같은 이름의 선수가 뽑히는 경우를 제거해야한다.
이 외에도 자잘한 문제점들이 있다.
일단 큰 틀을 완성하고 하나씩 업데이트하는 방식으로 해결할 계획이다.
'프로젝트 > FIFAONLINE4 RandomSquadMaker' 카테고리의 다른 글
Cleartext HTTP ... not permitted 오류 (0) | 2022.07.05 |
---|---|
Glide 활용 이미지 Load (0) | 2022.06.08 |
시즌별 선수 불러오기(FIFAONLINE RandomSquadMaker #3) (0) | 2022.05.25 |
Nexon OpenApi를 활용하여 11명의 선수 Random으로 불러오기(FIFAONLINE RandomSquadMaker #1) (0) | 2022.05.22 |
Nexon OpenApi Parse with Android Stdio (FIFAONLINE RandomSquadMaker #0) (0) | 2022.05.20 |