목표 : 공공데이터포털에 있는 오픈 API 불러오자!
먼저, 공공데이터포털에 접속한 후 로그인을 한다.
로그인 후 "마이페이지 - 오픈 API - 개발계정"에서 내가 활용신청한 데이터를 확인할 수 있다.
실습 파일 : 대전광역시 문화관광(관광지) 오픈 API
오픈 API에 대한 자세한 정보는 해당 데이터의 참고문서를 확인하면 된다.
그리고 가장 중요한 것!!
API 활용을 위해서는 서비스키(인증키)가 필요하다.
※ 서비스키(인증키)는 "오픈 API - 인증키 발급현황"에서 발급 후 확인 (발급 후 1시간 이후에 사용 가능)
※ API 불러온 후 오류 메시지가 나타난다면, 인코딩 혹은 서비스키 문제
이제, 오픈 API를 불러오자.
필자는 대전광역시 문화관광(관광지) API에서 문화관광 관광지 목록조회(XML)에 대한 정보를 불러올 것이다.
참고문서로 필요한 정보를 확인한다.
- 필요한 정보 : Call Back URL, 요청 메시지 명세
- 요청 메시지 명세의 항목구분 (1: 필수, 0: 선택)
- serviceUrl : Call Back URL에서 tourDataService까지의 정보
- oper_serve : Call Back URL에서 tourDataList (어떤 정보의 상세기능을 불러올 것인지 확인하여 적절히 입력)
- my_key : 본인 서비스키 정보
- url : 앞의 정보들을 결합하여 생성 (요청 메시지 명세에서 항목구분 1로 되어 있는 항목은 필수로 존재해야 함)
url을 생성할 때, serviceKey 부분은 I() 함수를 이용하였다.
해당 부분이 단순히 my_key로 입력될 경우, 유효하지 않은 서비스 키로 오류가 발생할 수 있다.
이러한 오류를 사전에 I() 함수를 이용하여 인코딩/디코딩 문제를 방지하였다.
library(XML)
library(dplyr)
library(httr)
library(tidyverse)
rm(list=ls()) # R 데이터 전체 삭제
serviceUrl <- "http://apis.data.go.kr/6300000/tourDataService"
oper_serve <- "/tourDataListJson"
my_key <- "본인 서비스키"
pageNo <- 1 # 페이지 번호
rows <- 10 # 한 페이지 결과 수
url <- paste0(serviceUrl,oper_serve,
"?serviceKey=", I(my_key),
"&numOfRows=", rows,
"&pageNo=", pageNo,
sep = "")
Xml_data <- xmlParse(url) # xml 확인
위의 코드를 통해 정보들이 정상적으로 출력이 되면, 총 정보를 수집한다.
# # i 번째 url을 xmlTreeParse 이용해 parsing
all_data <- xmlTreeParse(url, useInternalNodes = TRUE, encoding = "UTF-8")
rootNode <- xmlRoot(all_data) # xml root node 획득
## 총 오픈API 호출을 위함
numOfRows <- as.numeric(xpathApply(rootNode, "//numOfRows", xmlValue))
totalCount <- as.numeric(xpathApply(rootNode, "//totalCount", xmlValue))
# 총 오픈 API 호출 횟수 계산
loopCount <- ceiling(totalCount/numOfRows)
fianlTotal_Data <- data.frame()
i <- 1
for (i in 1:loopCount) {
url <- paste0(serviceUrl, oper_serve,
"?serviceKey=", I(my_key),
"&numOfRows=", rows,
"&pageNo=", pageNo,
# "apiType=", type_data_format,
sep = "")
doc <- xmlTreeParse(url, useInternalNodes = TRUE, encoding = "UTF-8")
rootNode <- xmlRoot(doc)
xmlData <- xmlToDataFrame(nodes=getNodeSet(rootNode, '//items'))
fianlTotal_Data <- rbind(fianlTotal_Data, xmlData)
cat(i, "\n")
}
View(fianlTotal_Data)
write.csv(fianlTotal_Data, "api_data.csv", row.names = FALSE, fileEncoding = "CP949")
공공데이터포털의 오픈 API(XML)에 대한 정보를 R을 이용하여 추출하였다. (잘 추출되었다!)
※ 다양한 데이터를 통해 응용해 보세요. 데이터 정제 및 추출을 위해서는 연습이 필요합니다.
[참고자료]
'분석가 Step 1. 데이터 분석 > R' 카테고리의 다른 글
공공데이터포털 오픈 API 불러오기 2편 (0) | 2023.03.17 |
---|---|
데이터 입력 오류(인코딩 문제) 간단히 해결하기 (0) | 2023.03.16 |
데이터 입력 오류(인코딩 문제) 해결하기 (0) | 2023.03.16 |
웹 크롤링(Web Crawling)으로 데이터 수집하기(2) (0) | 2023.03.16 |
웹 크롤링(Web Crawling)으로 데이터 수집하기(1) (0) | 2023.03.16 |