-
[ECOS API] 한국은행 경제통계 API 이용 (1) xmlPython/텔레그램봇:채권모니터링 2020. 12. 10. 21:11
채권 금리를 어디서 가져올까 하다가, 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 '''
'Python > 텔레그램봇:채권모니터링' 카테고리의 다른 글
[python f'{formating}'] 봇 메시지 포맷팅 (0) 2020.12.16 [Pandas] 데이터 정리 (2) 필터링(query) 및 정렬 (0) 2020.12.15 [Pandas] 데이터 정리 (1) read_csv(na_values) & apply (0) 2020.12.15 [ECOS API] 한국은행 경제통계 API 이용 (2) json (0) 2020.12.14 [데이터수집] 한국거래소 정보 가져오기 (0) 2020.12.02