이번에는 XML라이브러리를 이용하여 서울시 공공데이터를 불러온 후 저장하는 글입니다.


로그인 및 인증키 생성

서울 열린데이터 광장에 들어가서 로그인을 합니다.

https://blog.kakaocdn.net/dn/slaME/btqLXSb4Pg9/3xY68x8AF8JOrqTooZ3nWK/img.png


다음 원하는 데이터셋을 찾으러 공공데이터 - 데이터셋 을 누릅니다.

https://blog.kakaocdn.net/dn/bfsPp6/btqLYMo7pXq/0fA7Rb8IKag1fpNpczi2t0/img.png


원하는 데이터를 찾은 후 해당 페이지로 들어갑니다.

https://blog.kakaocdn.net/dn/mYaHb/btqL1n3t7yP/6LAehkFi2nEAkINEun4KpK/img.png


스크롤을 살짝 내려면 아래 페이지를 볼 수 있는데 Open API - 인증키 신청으로 들어갑니다. 공공데이터는 인증키 없이도 csv 형식의 파일을 가져올 수 있는 경우도 있지만 인증키 신청을 통해 권한을 인증키를 받은 후에 접근 가능한 경우도 있습니다. 실제로 제가 팀 프로젝트를 할 때는 공공데이터 수집 시 인증키 발급 없이 진행하기도 했습니다.

https://blog.kakaocdn.net/dn/IsG9R/btqLXSouxDA/ZQ2Ci3bFin8b1O0uR35jk0/img.png


인증키 신청 페이지로 넘어갔으면 필수항목에 모두 내용을 기재해야하는데 본인의 사용목적을 적당히 첨가하여 신청서를 제출합니다.

https://blog.kakaocdn.net/dn/ISUci/btqLW8SEN97/tiS2Oo1vuIFf9eLH7fFk1K/img.png

https://blog.kakaocdn.net/dn/nzG9Y/btqLYM9suMe/chhzQKLkJjXTvVbn5TYASk/img.png

발급 완료


공공데이터를 가져오기 위해 인증키 코드를 복사합니다.

https://blog.kakaocdn.net/dn/cFiyDx/btqLZI7REpR/dzNKUojngoiZK29TqQdtOk/img.png



공공데이터 가져오기

이제 R 프로그램으로 공공데이터를 가져오도록 하겠습니다. XML 라이브러리를 불러오기 위해 패키지 설치를 먼저 진행합니다.

# XML 설치 및 로드
install.packages("XML")
library(XML)

다음으로는 아까 발급받은 인증키와 URL을 이용하여 공공데이터를 가져옵니다. 8088까지가 메인 주소이며 /이후는 옵션 값을 입력합니다. sample에는 아까 발급받은 인증키를 입력하고 xml 형식이기 떄문에 타입은 xml입니다. 아까 선택한 데이터셋을 참고하여 서비스 명을 채우고 다음에 오는 숫자 두 개는 각각 데이터 행 시작번호와 끝번호입니다. 즉, 공공데이터 홈페이지에 적혀있는 /1/51행부터 5행까지 라는 뜻이 되겠습니다.

형식에 맞춰 텍스트를 만든 후 xmlParse 함수를 이용하여 공공데이터를 가져옵니다.

#api_url을 통해 웹에 접속하여 XML 파일 다운로드 및 파싱
#http://openapi.seoul.go.kr:8088/sample/xml/ListPublicReservationCulture/1/5/%EC%BD%98%EC%84%9C%ED%8A%B8
url = "http://openapi.seoul.go.kr:8088"
auth_key = "본인_인증키"
# sample 제거
type = 'xml'
service = 'ListPublicReservationCulture'
startindex = '1'
endindex = '50'
api_url = paste(url, auth_key, type, service, startindex, endindex, sep = '/')
parsedXml <-xmlParse(api_url)

다음으로는 방금 가져온 공공데이터를 데이터프레임 형식으로 전환합니다.

# XML구조에서 <row>...</row> 안의 데이터 얻기
rowXml <- getNodeSet(parsedXml, "//row")

#xml을 dataFrame으로 변경
api_data <-xmlToDataFrame(rowXml, stringsAsFactors = F)

#구조 확인
str(api_data)

#테이블 확인
View(api_data)



공공데이터 csv로 저장하기

불러온 데이터를 “서울시문화행사공공서비스예약정보.csv”라는 이름으로 저장합니다.

write.table(partData,
            file = "서울시문화행사공공서비스예약정보.csv",
            append = FALSE, quote = TRUE, sep = ",",
            eol = "\n", na = "NA",col.names = T, row.names = F)


옵션 설명

인자 이름 설명
x 저장할 객체
file 저장할 파일
append 기존 파일에 추가할지 여부
quote 쌍따옴표를 표시할지 여부(기본값 TRUE)
sep, eol, na 구분자, 줄바꿈 표시, 잘못된 문자 표기
row.names 행(row), 열(col)의 이름 저장 여부(기본값 FALSE)
qmethod 인용부호를 escape()또는 double(“)표기 설정
fileEncoding 인코딩 설정