본문 바로가기

R 크롤링

오픈API를 활용한 대기오염정보 조회(4)

반응형
오픈API를 활용한 대기오염정보 조회(4)

이 자료는 R markdown에서 작성하였습니다.

오픈API를 활용한 대기오염정보 조회(1)
오픈API를 활용한 대기오염정보 조회(2)
오픈API를 활용한 대기오염정보 조회(3)

시도별 실시간 측정정보 조회

라이브러리 불러오기

##install.packages("rvest")
##install.packages("XML")
##install.packages("data.table")
library(rvest)
library(XML)
library(data.table)

시도 구분코드 준비

웹주소에 한글이 적혀 있으면 정상적으로 조회가 안되드라구요. 왜 그런지 ㅡ.ㅡ;;
어쩔 수 없이 모든 시도 웹 주소를 미리보기로 조회해서 해당 코드를 복사했습니다.

sido<-c("%EC%84%9C%EC%9A%B8","%EB%B6%80%EC%82%B0","%EB%8C%80%EA%B5%AC","%EC%9D%B8%EC%B2%9C",
        "%EA%B4%91%EC%A3%BC","%EB%8C%80%EC%A0%84","%EC%9A%B8%EC%82%B0","%EA%B2%BD%EA%B8%B0",
        "%EA%B0%95%EC%9B%90","%EC%B6%A9%EB%B6%81","%EC%B6%A9%EB%82%A8","%EC%A0%84%EB%B6%81",
        "%EC%A0%84%EB%82%A8","%EA%B2%BD%EB%B6%81","%EA%B2%BD%EB%82%A8","%EC%A0%9C%EC%A3%BC",
        "%EC%84%B8%EC%A2%85")
sido_name<-c("서울", "부산", "대구", "인천", "광주", "대전", "울산",
             "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남",
             "제주", "세종")
#names(Sido)<-sido_name

자료 저장 및 조회

url1 <- "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey="
serviceKey <- "9x8WeUtQ1a6VrfDnAAN3PDJhSp4VFdoqfopYR4K31SeTR08xHjM3W05qW13HYEdKtOAu3U4RSeOfErde0EP2ng%3D%3D"
url2 <- "&numOfRows=100&pageSize=1&pageNo=1&startPage=1&sidoName="
ver <- "&ver=1.3"
air_poll <- list()
air_pollution <- list()

for(j in 1:17){
api_url <- paste(url1,serviceKey,url2,sido[j],ver, sep="")
air_raw<- xmlTreeParse(api_url,useInternalNodes = T, encoding = "UTF-8")
rootNode <- xmlRoot(air_raw)
items = rootNode[[2]][["items"]]
size=xmlSize(items)
air_emp <- data.frame()
air_poll <- list()

for(i in 1:size)
{
  test <- xmlSApply(items[[i]],xmlValue)  
  air_emp <- data.table(Province=sido_name[j], stationName=test[[1]], mangName=test[[2]],
                        Time=test[[3]], so2=test[[4]], co=test[[5]], o3=test[[6]],
                        no2=test[[7]],  pm10=test[[8]], pm1024=test[[9]],
                        pm25=test[[10]], pm2524=test[[11]], khai=test[[12]],
                        khaigrade=test[[13]], so2grade=test[[14]], cograde=test[[15]],
                        o3grade=test[[16]], no2grade=test[[17]], pm10grade=test[[18]],
                        pm25grade=test[[19]], pm101hgrade=test[[20]], pm251hgrade=test[[21]])
  air_poll[[i]]=air_emp
}
  air_pollution[[j]]=air_poll
}

air_poll_final <- list()
for(i in 1:17){
air_poll_final[[i]] <- rbindlist(air_pollution[[i]])
}

air_poll_final <- rbindlist(air_poll_final)

조회 결과 확인하기

View(air_poll_final)

총 346개 자료가 조회되었습니다. 다음에는 이 자료를 활용해서 그래프로 표현하는 방법에 대해 알아보겠습니다.

반응형