안녕하세요 여몽의 눈동자입니다. 오늘은 엑셀 매크로를 이용해 한국은행 경제통계시스템 (ECOS)에서 자료를 다운받는 법을 알아보겠습니다.
한국은행에서는 경제통계시스템 (ECOS) 이라는 사이트를 통해 각종 주요 경제지표들을 제공하고 있습니다. 경제데이터를 얻기 위해 매우매우 유용한 사이트이고 인터페이스도 편리한 편인데요 다만 특정 경제데이터를 반복적으로 사용하시는 분들은 매번 한국은행 홈페이지에 접속하고 클릭을 통해 데이터를 불러오는게 상당히 귀찮은 작업이 될 수 있습니다. 그래서 오늘은 한은에서 제공하는 API를 통해 엑셀에서 직접 필요한 데이터를 불러오는 방법을 소개합니다.
1. Open API 가입하기
우선 파이썬으로 데이터를 긁어오기 위해서는 Open API 회원으로 가입해야 합니다. Open API 사이트로 갑니다. (https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp)
그러면 다음과 같은 화면이 뜹니다.
서비스이용 -> 인증키 신청을 클릭해 회원가입을 합시다.
그리고 난 후 마이페이지에 로그인하면 아래와같이 본인의 인증키가 발급된 것을 확인할 수 있습니다.
2. url 설정하기
이제 인증키 준비가 끝났으니 통계를 다운받아야겠죠?
여기서는 7. 물가 항목의 수출물가지수(기본분류)를 다운받아 보겠습니다.
데이터는 특정 형식을 갖춘 url을 api로 보내어 받을 수 있습니다. Url 형식은 다음과 같습니다.
http://ecos.bok.or.kr/api/[서비스명]/[인증키]/[요청파일타입]/[언어]/[요청시작건수]/[요청종료건수]/[통계코드]/[주기]/[검색시작일자]/[검색종료일자]/(항목코드1)/(항목코드2)/(항목코드3) 입니다. 항목코드들은 필수형식이 아니지만 나머지는 필수입력형식 입니다.
서비스명: 시계열데이터를 받기위해서는 서비스명은 StatisticSearch 로 두면 됩니다.
인증키: 본인 인증키를 복사 + 붙여넣기 합니다.
요청파일타입: 엑셀이므로 xml을 선택합니다.
언어: kr
요청시작건수: 1
요청종료건수: 충분히 넉넉한 갯수로 설정합니다. 데이터가 이 숫자보다 적으면 알아서 적게 받으므로 문제가 없습니다. 여기서는 10000 으로 설정하겠습니다.
통계코드: 개발 가이드 -> 통계코드 검색으로 가보면 내가 원하는 시계열 자료별로 통계코드를 확인 할 수 있습니다. 수출물가지수의 코드는 019Y301 입니다.
수출물가지수 또는 수입물가지수를 클릭하면 세부항목코드를 확인할 수 있습니다. 전체 수출물가지수 및 수입물가지수를 이용할 계획인데요, 밑에 보시면 수출물가지수 총지수의 항목코드는 *AA 임을 알 수 있습니다. 그리고 통화설정을 해야하는데요 이것은 원화기준으로 W를 선택합니다. 이 항목코드들은 각각 항목코드1, 2로 설정하면 됩니다.
주기: 월별데이터이므로 MM을 설정합니다. 연간자료는 YY, 분기별자료는 QQ, 일별자료는 DD를 설정하면 됩니다.
검색시작일자: yyyymm 포맷으로 넣으면 됩니다. 여기서는 1971년 1월부터 불러오겠습니다. 즉 197101을 넣습니다.
검색종료일자: 2019년 5월까지 불러오겠습니다. 201905를 설정합니다.
http://ecos.bok.or.kr/api/StatisticSearch/[본인의 인증키]/xml/kr/1/10000/019Y301/MM/201101/201905/*AA/W/
3. 엑셀 비주얼 베이직 모듈 설정
한은 Open API 홈페이지에서 개발가이드 -> 언어별 개발가이드 -> Excel을 보시면 어떻게 엑셀 설정을 바꾸어야 하는지 자세히 설명이 나와있으니 여기서는 엑설 설정에 대한 부분은 건너뛰겠습니다. 링크 참조하세요.
(https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=guideDevGuide&menuGroup=MENU000004&menuCode=MENU000017)
4. 데이터 불러오기
한은 Open API 홈페이지에 엑셀 설정 막바지에 보면 코드가 제공되고 있습니다. 이 코드는 100대 통계지표중 일부분을 불러오는 것이고요 우리의 목적에 맞게 코드를 수정할 필요가 있겠습니다.
수정된 코드 예시 입니다.
우선 callUrl 뒤의 따옴표에 들어가는 부분을 본인이 원하는 통계에 맞춰 바꿔주셔야 합니다.
그리고 Set nodeList = objXml.SelectNodes("/KeyStatisticList/row") 이부분을
Set nodeList = objXml.SelectNodes("/StatisticSearch/row") 로 변경합니다.
---------------------------------------------------------------------------------------------------
Sub callOpenapi()
Dim callUrl As String
Dim result As String
Dim objHttp As New WinHttpRequest
Dim nodeList As IXMLDOMNodeList
Dim nodeRow As IXMLDOMNode
Dim nodeCell As IXMLDOMNode
Dim rowCount As Integer
Dim cellCount As Integer
Dim rowRange As Range
Dim cellRange As Range
Dim sheet As Worksheet
callUrl = "http://ecos.bok.or.kr/api/StatisticSearch/[본인인증키]/xml/kr/1/10000/019Y301/MM/201101/201905/*AA/W/"
objHttp.Open "GET", callUrl, False
objHttp.Send
If objHttp.Status = 200 Then
result = objHttp.ResponseText
Dim objXml As MSXML2.DOMDocument
Set objXml = New DOMDocument
objXml.LoadXML (result)
Set sheet = ActiveSheet
Set nodeList = objXml.SelectNodes("/StatisticSearch/row")
rowCount = 0
For Each nodeRow In nodeList
rowCount = rowCount + 1
cellCount = 0
For Each nodeCell In nodeRow.ChildNodes
cellCount = cellCount + 1
Set cellRange = sheet.Cells(rowCount, cellCount)
cellRange.Value = nodeCell.Text
Next nodeCell
Next nodeRow
End If
End Sub
---------------------------------------------------------------------------------------------------
그리고 위의 단추를 프로그램을 돌려주면
엑셀에 결과가 출력되는 모습을 볼 수 있습니다.
한국은행에서는 경제통계시스템 (ECOS) 이라는 사이트를 통해 각종 주요 경제지표들을 제공하고 있습니다. 경제데이터를 얻기 위해 매우매우 유용한 사이트이고 인터페이스도 편리한 편인데요 다만 특정 경제데이터를 반복적으로 사용하시는 분들은 매번 한국은행 홈페이지에 접속하고 클릭을 통해 데이터를 불러오는게 상당히 귀찮은 작업이 될 수 있습니다. 그래서 오늘은 한은에서 제공하는 API를 통해 엑셀에서 직접 필요한 데이터를 불러오는 방법을 소개합니다.
1. Open API 가입하기
우선 파이썬으로 데이터를 긁어오기 위해서는 Open API 회원으로 가입해야 합니다. Open API 사이트로 갑니다. (https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp)
그러면 다음과 같은 화면이 뜹니다.
서비스이용 -> 인증키 신청을 클릭해 회원가입을 합시다.
그리고 난 후 마이페이지에 로그인하면 아래와같이 본인의 인증키가 발급된 것을 확인할 수 있습니다.
2. url 설정하기
이제 인증키 준비가 끝났으니 통계를 다운받아야겠죠?
여기서는 7. 물가 항목의 수출물가지수(기본분류)를 다운받아 보겠습니다.
데이터는 특정 형식을 갖춘 url을 api로 보내어 받을 수 있습니다. Url 형식은 다음과 같습니다.
http://ecos.bok.or.kr/api/[서비스명]/[인증키]/[요청파일타입]/[언어]/[요청시작건수]/[요청종료건수]/[통계코드]/[주기]/[검색시작일자]/[검색종료일자]/(항목코드1)/(항목코드2)/(항목코드3) 입니다. 항목코드들은 필수형식이 아니지만 나머지는 필수입력형식 입니다.
서비스명: 시계열데이터를 받기위해서는 서비스명은 StatisticSearch 로 두면 됩니다.
인증키: 본인 인증키를 복사 + 붙여넣기 합니다.
요청파일타입: 엑셀이므로 xml을 선택합니다.
언어: kr
요청시작건수: 1
요청종료건수: 충분히 넉넉한 갯수로 설정합니다. 데이터가 이 숫자보다 적으면 알아서 적게 받으므로 문제가 없습니다. 여기서는 10000 으로 설정하겠습니다.
통계코드: 개발 가이드 -> 통계코드 검색으로 가보면 내가 원하는 시계열 자료별로 통계코드를 확인 할 수 있습니다. 수출물가지수의 코드는 019Y301 입니다.
수출물가지수 또는 수입물가지수를 클릭하면 세부항목코드를 확인할 수 있습니다. 전체 수출물가지수 및 수입물가지수를 이용할 계획인데요, 밑에 보시면 수출물가지수 총지수의 항목코드는 *AA 임을 알 수 있습니다. 그리고 통화설정을 해야하는데요 이것은 원화기준으로 W를 선택합니다. 이 항목코드들은 각각 항목코드1, 2로 설정하면 됩니다.
주기: 월별데이터이므로 MM을 설정합니다. 연간자료는 YY, 분기별자료는 QQ, 일별자료는 DD를 설정하면 됩니다.
검색시작일자: yyyymm 포맷으로 넣으면 됩니다. 여기서는 1971년 1월부터 불러오겠습니다. 즉 197101을 넣습니다.
검색종료일자: 2019년 5월까지 불러오겠습니다. 201905를 설정합니다.
따라서 수출물가지수(총지수)를 얻기 위해 사용할 url은 다음과 같습니다.
http://ecos.bok.or.kr/api/StatisticSearch/[본인의 인증키]/xml/kr/1/10000/019Y301/MM/201101/201905/*AA/W/
3. 엑셀 비주얼 베이직 모듈 설정
한은 Open API 홈페이지에서 개발가이드 -> 언어별 개발가이드 -> Excel을 보시면 어떻게 엑셀 설정을 바꾸어야 하는지 자세히 설명이 나와있으니 여기서는 엑설 설정에 대한 부분은 건너뛰겠습니다. 링크 참조하세요.
(https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=guideDevGuide&menuGroup=MENU000004&menuCode=MENU000017)
4. 데이터 불러오기
한은 Open API 홈페이지에 엑셀 설정 막바지에 보면 코드가 제공되고 있습니다. 이 코드는 100대 통계지표중 일부분을 불러오는 것이고요 우리의 목적에 맞게 코드를 수정할 필요가 있겠습니다.
수정된 코드 예시 입니다.
우선 callUrl 뒤의 따옴표에 들어가는 부분을 본인이 원하는 통계에 맞춰 바꿔주셔야 합니다.
그리고 Set nodeList = objXml.SelectNodes("/KeyStatisticList/row") 이부분을
Set nodeList = objXml.SelectNodes("/StatisticSearch/row") 로 변경합니다.
---------------------------------------------------------------------------------------------------
Sub callOpenapi()
Dim callUrl As String
Dim result As String
Dim objHttp As New WinHttpRequest
Dim nodeList As IXMLDOMNodeList
Dim nodeRow As IXMLDOMNode
Dim nodeCell As IXMLDOMNode
Dim rowCount As Integer
Dim cellCount As Integer
Dim rowRange As Range
Dim cellRange As Range
Dim sheet As Worksheet
callUrl = "http://ecos.bok.or.kr/api/StatisticSearch/[본인인증키]/xml/kr/1/10000/019Y301/MM/201101/201905/*AA/W/"
objHttp.Open "GET", callUrl, False
objHttp.Send
If objHttp.Status = 200 Then
result = objHttp.ResponseText
Dim objXml As MSXML2.DOMDocument
Set objXml = New DOMDocument
objXml.LoadXML (result)
Set sheet = ActiveSheet
Set nodeList = objXml.SelectNodes("/StatisticSearch/row")
rowCount = 0
For Each nodeRow In nodeList
rowCount = rowCount + 1
cellCount = 0
For Each nodeCell In nodeRow.ChildNodes
cellCount = cellCount + 1
Set cellRange = sheet.Cells(rowCount, cellCount)
cellRange.Value = nodeCell.Text
Next nodeCell
Next nodeRow
End If
End Sub
---------------------------------------------------------------------------------------------------
그리고 위의 단추를 프로그램을 돌려주면
엑셀에 결과가 출력되는 모습을 볼 수 있습니다.
댓글
댓글 쓰기