1. 사이트 접속
https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=main
2. 인증키 신청
3. 활용 (python)
0) 환경
- Anaconda3, Python 3.7.6 or higher
- Jupyter Notebook
1) 프로젝트 실행
- 시작 > Anaconda3(32/64-bit) > Jupyter Notebook을 실행합니다.
2) 프로그램 작성
- Files > New > Python3 를 선택하여 New Notebook을 생성합니다.
- 생성된 편집기에 다음과 같이 Python 코드를 작성합니다. (*복사 + 붙여넣기)
- url 변수에 호출하려는 API주소를 입력합니다.
import requests
import xml.etree.ElementTree as ET
## 호출하려는 OpenAPI URL를 정의합니다.
url = "http://ecos.bok.or.kr/api/StatisticItemList/sample/xml/kr/1/1/043Y070/"
## 정의된 OpenAPI URL을 호출합니다.
response = requests.get(url)
## http 요청이 성공했을때 API의 리턴값을 가져옵니다.
if response.status_code == 200:
try:
contents = response.text
ecosRoot = ET.fromstring(contents)
## 호출결과에 오류가 있었는지 확인합니다.
if ecosRoot[0].text[:4] in ("INFO","ERRO"):
print(ecosRoot[0].text + " : " + ecosRoot[1].text)
## 오류메세지를 확인하고 처리합니다.
else:
print(contents)
## 결과값을 활용하여 필요한 프로그램을 작성합니다.
except Exception as e:
print(str(e))
##예외가 발생했을때 처리합니다.
3) 실행 및 확인
- Cell > Run Cell 또는 Run 버튼을 클릭하여 프로그램을 실행하고 결과를 확인합니다.
4. OpenAPI URL
통계코드 검색
TIP 언어별 개발 가이드 확인
5. 응용
개발명세서 다운로드
python requests module
https://me2nuk.com/Python-requests-module-example/
## 환경구축
import datetime as dt
import requests as r
import pandas as pd
import numpy as np
from bs4 impoort BeautifulSoup
import json
from urllib.request import urlopen
from datetime import date, timedelta
import warnings
warnings.filterwarnings(action='ignore')
## 날짜 데이터프레임 생성
start_date = '20100101' # 시작날짜
yesterday = date.today() - timedelta(1) # 'yesterday' 변수 생성
end_date = yesterday.strftime('%Y%m%d') # 날짜 포맷팅
date_df = pd.Dataframe(pd.date_range(start=start_date, end=end_date, freq='D').strftime('%Y%m%d')) # 날짜 데이터프레임 만들기
date_df.columns = ['Date'] # date_df 칼럼명을 'Date'로 지정 (4304, 1)
date_df.set_index('Date', inplace=True) # date_df 인덱스를 'Date'칼럼으로 대체 (4304, 0)
date_df
# 매일 업데이트 되는 자료 (daily updated data)
## 환율 : 원/달러, 원/위안, 윈/엔, 원/유로 (매매기준율)
## 금리 : 콜금리(1일,전체거래)
key = 'Your Key' # 한국은행 OpenAPI서비스 메인 > 마이페이지 > 인증키 발급내역
start_page = '1'
end_page = '10000'
main_codes = {'036Y001':'환율',
'060Y001':'시장금리'
}
code_036Y001 = {'0000001':'환율(DD)_원달러환율',
'0000053':'환율(DD)_원위안환율',
'0000002':'환율(DD)_원엔환율',
'0000003':'환율(DD)_원유로환율'
}
code_060Y001 = {'010101000':'시장금리(DD)_콜금리(DD)',
'010200000':'시장금리(DD)_국고채(3년)'
}
daily_df = pd.DataFrame() # 빈 데이터프레임 생성
row_list = [] # 빈 리스트 생성
for main_code in main_codes :
if main_code == '036Y001' :
sub_code = code_036Y001
elif main_code == '060Y001' :
sub_code = code_060Y001
for code in sub_code : # 칼럼수 만큼 반복
url = 'http://ecos.bok.or.kr/api/StatisticSearch/'+key+'/xml/kr/'+start_page+'/'+end_page+'/'+main_code+'/DD/'+start_date+'/'+end_date+'/'+code+'/?/?/'
res = requests.get(url)
xml = BeautifulSoup(res.text,'xml')
ecos = xml.find_all("row")
TIME_list = []
DATA_VALUE_list = []
ITEM_NAME1_list = []
for item in ecos :
ITEM_NAME1 = item.find('ITEM_NAME1').text
DATA_VALUE = item.find('DATA_VALUE').text
#DATA_VALUE = float(DATA_VALUE)
TIME = item.find('TIME').text
TIME_list.append(TIME)
DATA_VALUE_list.append(DATA_VALUE)
ITEM_NAME1_list.append(ITEM_NAME1)
temp = pd.DataFrame(DATA_VALUE_list, index = TIME_list)
daily_df = pd.concat([daily_df, temp], axis = 1)
row_list.extend(sub_code.values())
daily_df.columns = row_list
#Daily_df.fillna(method='pad', inplace=True) # 휴일 결측치 처리(전일값)
daily_df.reset_index(0, inplace=True) # index 재설정
daily_df.rename(columns = {"index": "Date"}, inplace = True) # 컬럼 이름 변경
daily_df
'Develop > the code' 카테고리의 다른 글
[Open API] 네이버 API를 활용한 지도 만들기 (0) | 2022.02.04 |
---|---|
[Open API] 네이버 API 쉽게 쓰기 (0) | 2022.02.03 |
[Open API] 국경일 & 공휴일 구하기 (0) | 2021.11.04 |
[OpenAPI] investpy (주식/ETF/지표/환율) (0) | 2021.10.14 |
'비오는 날' 예측하기 (0) | 2021.10.13 |