1) 찾고자 하는 데이터 가져오기: https://www.data.go.kr/index.do
2) 데이터 > Open API 로 들어가서 데이터고르기
3) 활용신청하기
4) 마이페이지에서 승인 신청 확인
5) 미리보기를 통해 링크 확인 (참고문서 활용시 데이터 이해하는 것에 도움이 됨)
6) 미리보기를 통해 위의 URL 확인, 아래 변수명 확인
7) library, packages 가져오기
#library------------------------------------------
library(XML)
library(httr)
library(RCurl)
library(plyr)
library(data.table)
library(haven)
library(devtools)
library(na.tools)
library(expss)
library(plyr)
library(utils)
library(janitor)
library(dplyr)
library(do)
library(ggplot2)
library(skimr)
library(matrixStats)
library(magrittr)
library(openxlsx)
library(viridis)
library(hrbrthemes)
library(stringr)
8) 아래 코드 이용하기 (녹색은 설명, 보라색은 개인 데이터에 맞춰 수정해야하는 부분)
api_url="http://openapi.data.go.kr/openapi/service/rest/Covid19" #들어가야하는 주소
operation="/getCovid19SidoInfStateJson" #"/get-" 으로 시작하는 오퍼레이션 주소
key="?serviceKey="
service_key="(개인 Encoding 서비스키)"
pageNo="&pageNo="
pageNo1=1
numOfRows="&numOfRows="
numOfRows1=100
startCreateDt="&startCreateDt="
startCreateDt1=20200101 #공공데이터센터에서는 옵션이라고 하지만 없으면 제대로 안돌아감
endCreateDt="&endCreateDt="
endCreateDt1=20211231
requestUrl = paste0(api_url,operation,key,service_key,numOfRows,numOfRows1,pageNo,pageNo1,startCreateDt,startCreateDt1,endCreateDt,endCreateDt1) #URL 불러오기
page=getForm(paste0(requestUrl,"1"),query="")
doc=xmlToDataFrame(page)
str(doc)
doc$totalCount[2]
class(doc$totalCount[2])
totaldataNumber=as.numeric(doc$totalCount[2])
totalPageNumber=(totaldataNumber%/%100)+1
test=list() #리스트형태로
for (allpage in 1:totalPageNumber){ # 1번부터 totalPageNumber까지
temp=getForm(paste0(requestUrl,allpage),query="") #데이터를 갖고와서 temp에 저장
temp_dt=xmlTreeParse(temp,useInternalNode=T, encoding="utf-8") #temp를 xmlTreeparsing 을 인터넷 이용해서 temp_dt에 저장하고 코딩은 utf-8로 할 것 지시
rootNode=xmlRoot(temp_dt)
test[[allpage]]=rootNode
test3=list()
test2=data.frame()
items=rootNode[[2]][["items"]]
size=totaldataNumber
for(i in 1:size){
test1=xmlSApply(items[[i]], xmlValue)
test2=data.table(createDt=test1[1],
deathCnt=test1[2],
defCnt=test1[3],
gubun=test1[4],
gubunCn=test1[5],
gubunEn=test1[6],
incDec=test1[7],
isolClearCnt=test1[8],
localOccCnt=test1[9],
overFlowCnt=test1[10],
qurRate=test1[11],
seq=test1[12],
stdDay=test1[13],
updateDt=test1[14]
) #데이터 변수 지시
test3[[i]]=test2
}
test[[allpage]]=rbindlist(test3)
}
fin=data.frame(rbindlist(test3))
View(fin)
###EXPORT:D---------------------------------------
saveRDS(fin, "C:\\file_path\\COVIDTRACK.RDS")
write.csv(fin, "C:\\file_path\\COVIDTRACK.csv")
****
invalid service key에러가 뜨는 경우, 하루(24시간)을 기다려 볼 것
[결과]
'지식 창고 > R 언어' 카테고리의 다른 글
[R 웹 스크래핑 코드] 열린 재정 OPEN API 이용하기 (0) | 2022.05.25 |
---|---|
OPEN DART R로 크롤링하기 -1) 기본 파라미터 설정 (0) | 2022.04.22 |
R Script Note (0) | 2021.09.04 |
R 언어 설치 및 프로그램 구성 PPT 자료 (1) | 2020.07.19 |
R studio (0) - Package 관련 명령어/ 설치 방법 (0) | 2020.07.11 |
댓글