[ECOS API] 한국은행 경제통계 API 이용 (1) xml
채권 금리를 어디서 가져올까 하다가, API가 잘 되어있는 한국은행 API를 이용하기로 했다.
ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=main
한국은행 경제통계시스템 - OpenAPI 서비스
ecos.bok.or.kr
서비스 소개부터 개발 가이드, 예제코드까지 잘 나와있다.
서비스 이용 > 인증키 신청에 들어가서 약관에 동의하고, 이메일, 비밀번호, 이름, 전화번호, 목적을 기입하고 나면
금세 키가 발급된다.
이렇게 발급받은 키는 아래처럼 url 형태로 요청을 보내면 된다.
http://ecos.bok.or.kr/api/StatisticSearch/인증키/xml/kr/1/2/060Y001/DD/20201208/20201209/010300000/
내 경우, 통계 조회 조건 설정(StatisticSearch),
데이터는 2건만 요청할 것이라서 시작1 종료2로 지정했고,
일별 시장금리(060Y001) 항목에서, 데이터 타입은 DD(day)고
20201208 ~ 20201209 사이의
회사채(3년,AA-)(010300000) 데이터를 조회하기 위해 이런 쿼리를 작성했다.
위 쿼리 작성에 필요한 정보는 통계 세부항목 목록(StatisticItemList) 쿼리를 통해 확인 가능하다.
http://ecos.bok.or.kr/api/StatisticItemList/인증키/xml/kr/19/19/060Y001/
회사채(3년,AA-) 데이터는 통계자료-4.금리-4.1.1 시장금리(일별)의 19번째 항목이라서 19번째를 조회하면 된다.
<?xml version="1.0" encoding="UTF-8"?><StatisticItemList>
<list_total_count>23</list_total_count>
<row>
<STAT_CODE>060Y001</STAT_CODE>
<STAT_NAME>4.1.1 시장금리(일별)</STAT_NAME>
<GRP_CODE>Group1</GRP_CODE>
<GRP_NAME>항목선택</GRP_NAME>
<P_ITEM_CODE/>
<ITEM_CODE>010300000</ITEM_CODE>
<ITEM_NAME>회사채(3년,AA-)</ITEM_NAME>
<CYCLE>DD</CYCLE>
<START_TIME>19950103</START_TIME>
<END_TIME>20201210</END_TIME>
<DATA_CNT>6632</DATA_CNT>
</row>
</StatisticItemList>
<CYCLE>, <END_TIME> 태그에서 확인할 수 있다.
-
데이터는 아래처럼 xml 형태로 받을 수 있다.
<StatisticSearch>
<link type="text/css" rel="stylesheet" id="dark-mode-general-link"/>
<link type="text/css" rel="stylesheet" id="dark-mode-custom-link"/>
<style lang="en" type="text/css" id="dark-mode-custom-style"/>
<list_total_count>2</list_total_count>
<row>
<STAT_CODE>060Y001</STAT_CODE>
<STAT_NAME>4.1.1 시장금리(일별)</STAT_NAME>
<ITEM_CODE1>010300000</ITEM_CODE1>
<ITEM_NAME1>회사채(3년,AA-)</ITEM_NAME1>
<ITEM_CODE2> </ITEM_CODE2>
<ITEM_NAME2> </ITEM_NAME2>
<ITEM_CODE3> </ITEM_CODE3>
<ITEM_NAME3> </ITEM_NAME3>
<UNIT_NAME>연%</UNIT_NAME>
<TIME>20201208</TIME>
<DATA_VALUE>2.211</DATA_VALUE>
</row>
<row>
<STAT_CODE>060Y001</STAT_CODE>
<STAT_NAME>4.1.1 시장금리(일별)</STAT_NAME>
<ITEM_CODE1>010300000</ITEM_CODE1>
<ITEM_NAME1>회사채(3년,AA-)</ITEM_NAME1>
<ITEM_CODE2> </ITEM_CODE2>
<ITEM_NAME2> </ITEM_NAME2>
<ITEM_CODE3> </ITEM_CODE3>
<ITEM_NAME3> </ITEM_NAME3>
<UNIT_NAME>연%</UNIT_NAME>
<TIME>20201209</TIME>
<DATA_VALUE>2.214</DATA_VALUE>
</row>
</StatisticSearch>
xml 데이터는 python의 BeautifulSoup로 파싱했다.
import requests
from bs4 import BeautifulSoup
xml = requests.get('http://ecos.bok.or.kr/api/StatisticSearch/sample/xml/kr/1/2/060Y001/DD/20201208/20201209/010300000/')
with open('asdf.txt', 'a+', encoding="UTF-8") as t:
t.write(xml.text)
with open("asdf.txt") as fp:
soup = BeautifulSoup(fp, 'html.parser')
for row in soup.findAll('row'):
print(row.time.text, row.data_value.text)
'''
20201208 2.211
20201209 2.214
'''