본문 바로가기

R 크롤링

[R] 디아블로3 API를 활용하여 직업별 상위 랭킹 세팅 분포 구하기 세번째날

반응형

##작성자: 춤추는초코칩

##작성일: 2018-03-14

##작성내용: 바바리안 1위  랭커 아이템 확인하기


첫번째날: 디아블로3 개발자 사이트 가입하기

두번째날: 바바리안 랭커 배틀태그, 히어로아이디 수집하기


지난번에 수집한 대균열 상위랭커 1,000명 중 1위의 배틀태그는 GlafSana-3132, 아이디는 68384537입니다.

ranker[1,]


디아블로3 api에서 배틀태그와 히어로아이디를 알면, 해당하는 영웅의 아이템을 알 수 있습니다. 그 주소는 아래와 같습니다.

https://kr.api.battle.net/d3/profile/GlafSana-3132/hero/68384537/items?locale=ko_KR&apikey=geyghwgrgtecgkd33abx3kver8tj3v3p


이를 이용하여, 배틀태그와 아이디를 제외하고 3부분으로 나눕니다.

pre <- "https://kr.api.battle.net/d3/profile/"

mid <- "/hero/"

post <- "/items?locale=ko_KR&apikey=geyghwgrgtecgkd33abx3kver8tj3v3p"

그리고 그걸 paste()함수를 사용해서 하나의 텍스트로 만듭니다. 그리고 read_html()함수를 사용해서 해당 html정보를 가지고 왔습니다.

item_url <- paste(pre,ranker[1,1],mid,ranker[1,2],post, sep="")

item_url <- read_html(item_url)

item_url


여기서 13개의 아이템 유형을 구분하고, 아이템 이름이 들어가게될 item_name를 만듭니다.

item_type <- c("head", "neck", "torso", "shoulders", "legs", "waist", "hands", "bracers", "feet", "leftFinger", "rightFinger", "mainHand", "offHand")

item_name <- rep("",13)


조금 무식한 방법입니다만, 아래와 같은 과정을 거쳐서 "head"(투구)에 해당하는 아이템 이름 정보를 가지고 왔습니다.

1. regexpr()함수를 사용해서 item_url에서 "head"를 찾아냈습니다. 

2. substr()함수를 사용해서 "head"부터 길이 50개의 텍스트를 가지고 왔습니다.

3. strsplit()함수를 사용해서 해당 텍스트를 "\""를 구분자로 구분했습니다.

4. 해당 list를 unlist()함수를 사용해서 배열로 바꿨습니다.

5. 9번째에 위치한 자료가 아이템이름임을 확인하고 반환합니다.

unlist(strsplit(substr(item_url,regexpr("head",item_url),regexpr("head",item_url)+50),"\""))[9]


길이 50으로는 모자라는 경우가 있어서 실제로 적용은 100으로 했습니다.

아래와 같은 반복문을 통해서 총 13개의 아이템 이름을 확인했습니다.

for (i in 1:13) {

item_name[i] <- unlist(strsplit(substr(item_url,regexpr(item_type[i],item_url),regexpr(item_type[i],item_url)+100),"\""))[9]

}

item_name

이 분은 레코르 셋을 사용하고 있네요. ^ㅡ^

하지만 금박 허리띠를 착용하는 걸로 봐서는 일균세팅인거 같습니다. ㅠ.ㅠ 물론 이런 부분까지는 귀찮으니깐 고려하지 않을 예정입니다. ㅎㅎㅎ


거의 다 온거 같습니다. 아이템 이름을 확인했습니다. 두가지가 남아 있습니다. 

첫번째는 반복문을 사용해서 1000명의 랭커들의 아이템정보를 가지고 옵니다.

두번째는 이 정보를 가지고 분석을 합니다. 

제 생각으로는 대부분 투구 정보만 가지고 오면 세트 아이템 정보는 다 나온다고 생각합니다. 1000명의 세트 분포를 알아볼 예정입니다.

그럼 다음 시간에 뵙겠습니다. ^ㅡ^

반응형