컴공돌이의 취미 블로그

[3]. 서울 열린 데이터 광장 OpenAPI 사용 방법 - (2) 본문

Study/OpenAPI

[3]. 서울 열린 데이터 광장 OpenAPI 사용 방법 - (2)

컴공돌이​​ 2017. 8. 17. 15:34

[3]. 서울 열린 데이터 광장 OpenAPI 사용 방법 - (2)


오늘은 지난번에 작성한 서울 열린 데이터 광장의 OpenAPI 의 사용법중에서도 실질적으로 사용하는 코드에 대한 글을 작성해보고자 한다.


이전 글의 순서대로 진행을 하면 서울 열린 데이터 광장의 OpenAPI 에 접근할 수 있는 Url을 받을 수 있을 것이고 또한 인증키 발급과 사용법도 알 수 있을 것이다.


이제 OpenAPI를 사용하여 데이터를 가져오는 코드를 분석해 보자.


<코드 분석>

(1). XML 패키지의 설치와 호출

1
2
install.packages("XML")
library(XML)
cs

이전 글에서 살펴보면 OpenAPI를 통해서 가져올수 있는 데이터의 형태는 xml 혹은 json 이다.

이번글에서는 xml파일의 형태로 데이터를 가져올 것이기 때문에, 데이터를 다루기 위해서 xml 패키지를 설치하고 호출하여 사용할 것이다.


(2). 요청주소의 인자들

1
2
3
4
5
6
7
8
url1 <- "http://openapi.seoul.go.kr:8088/"
mykey <- "oooooooooooooooo"
url2 <- "/xml/"
category <- "CardSubwayStatsNew"
url3 <- "/1/"
datanumber <- 1
url4 <- "/"
date <- "20151101"
cs

OpenAPI에 접근할 Url을 구성하는 인자들이다.

url이라고 써져있는 인자들은 수정하면 안되는 인자들이고, mykey, category, datanumber, date는 수정이 가능한 인자이다.

mykey는 서울 열린 데이터 광장에서 발급받은 인증키를 복사하여 붙여넣기 하면 된다.

category는 어떠한 분야의 데이터를 가져오고 싶은지 서울 열린 데이터 광장 홈페이지에서 확인 후 원하는 코드를 적으면 된다.

datanumber는 해당 카테고리에서의 총 데이터 개수를 의미한다. 처음에 1로 설정한 이유는 Url에 우선 접근하여 총 데이터 수를 구하기 위해서 설정한 것이다.

date는 원하는 데이터의 날짜를 의미한다. 얻고싶은 데이터의 날짜를 입력하면 된다.

위의 인자들에서 원하는 년도만 집어넣으면 요청주소가 완성된다.


(3). 데이터를 저장할 데이터프레임 선언

1
table <- data.frame()
cs

OpenAPI를 통해서 읽어들인 데이터를 저장하기위해서 데이터 프레임을 선언해 준다.


(4). 요청주소에 접근하여 총 데이터 개수를 구하기

1
2
3
4
requestUrl <- paste(url1, mykey, url2, category, url3, datanumber, url4, date, sep="")
doc = xmlToDataFrame(requestUrl)
totaldataNumber = as.numeric(doc[1,1])
datanumber <- totaldataNumber
cs

datanumber을 1으로 설정한다음 Url에 접근하여 총 데이터 개수를 구한 뒤 datanumber을 바꾸어 준다.


(5). 첫번째 데이터부터 맨 끝데이터까지 포함하고있는 주소에 접근하여 데이터 저장

1
2
3
requestUrl <- paste(url1, mykey, url2, category, url3, datanumber, url4, date, sep="")
doc = xmlToDataFrame(requestUrl)
table <- doc[3:nrow(doc),4:ncol(doc)]
cs

datanumber을 총 데이터 개수로 설정하였으므로 Url에 접근하면 모든 데이터를 볼 수 있다.

xmlToDataFrame으로 Url에서의 데이터를 데이터프레임 형태로 바꾸어서 저장시켜주고

필요없는 행과 열을 제외하여 위에서 선언한 table에 저장시켜준다.


<전체 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// xml 형식의 데이터를 다루기 위해서 패키지를  다운 후 호출
install.packages("XML")
library(XML)
 
//////요청주소 요소들
//// 바꿀 필요 없는 부분
url1 <- "http://openapi.seoul.go.kr:8088/"
url2 <- "/xml/"
url3 <- "/1/"
url4 <- "/"
 
////원하는 값을 입력하는 부분
//발급받은 인증키
mykey <- "oooooooooooooooo"
// 데이터를 가져올 카테고리 명
category <- "CardSubwayStatsNew"
// 총 데이터 개수
datanumber <- 1
// 원하는 데이터 날짜
date <- "20151101"
 
//데이터를 저장할 데이터프레임을 선언
table <- data.frame()
 
// 위에 설정해놓은 요청주소에 필요한 모든것을 이어붙여서 요청주소를 생성
requestUrl <- paste(url1, mykey, url2, category, url3, datanumber, url4, date, sep="")
// 요청주소에 접근하여 xml형식의 파일을 Data frame의 형태로 변환하여 저장
doc = xmlToDataFrame(requestUrl)
//전체 데이터 개수를 저장
totaldataNumber = as.numeric(doc[1,1])
//datanumber에 전체 데이터 개수를 저장
datanumber <- totaldataNumber
 
// 전체데이터개수를 포함한 요청주소를 생성
requestUrl <- paste(url1, mykey, url2, category, url3, datanumber, url4, date, sep="")
// 요청주소에 접근하여 xml형식의 파일을 Data frame의 형태로 변환하여 저장
doc = xmlToDataFrame(requestUrl)
// 필요없는 행과 열을 제외하여 table에 데이터를 저장
table <- doc[3:nrow(doc),4:ncol(doc)]
cs


<코드 실행 시 얻는 데이터>

반응형