
API (Application Programming Interface)?
정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘
서로 다른 애플리케이션끼리 상호작용하고 데이터를 교환하기 위한 규칙과 도구
OPEN API?
외부에서 사용할 수 있도록 개방된 API
API Key: 사용자가 API를 사용할 수 있는 사용자인지 확인하는 역할
- 일부 API는 사용량이 제한
- 공식 문서의 일일 및 월간 사용량 제한 확인
사용 API
OpenWeatherMap API: 기상 데이터 및 날씨 정보를 제공하는 오픈 API
금융상품통합비교공시 API: 금융감독원에서 제공하는 금융 상품 정보를 제공하는 오픈 API
requests package
- 파이썬에서 HTTP 요청을 보낼 수 있는 라이브러리
Openweathermap API 실습
ex1. 특정 지역의 현재 날씨에 대한 모든 정보 출력하기
import requests
from pprint import pprint
# 문제1. 날씨 데이터의 응답을 json 형태로 변환하여 key 값만 출력하시오.
# 공식문서의 요청변수와 예제 요청결과(JSON) 부분을 참고합니다.
def get_weather():
api_key = "APIKEY"
# 서울의 위도
lat = 37.56
# 서울의 경도
lon = 126.97
# API 요청 URL
url = f'https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={api_key}'
# dict 형식으로 response 변수에 할당
response = requests.get(url).json()
return response
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
result = get_weather()
# pprint: 데이터를 보기 좋게(pretty print) 출력
pprint(result)
ex2. 특정 도시의 현재 날씨를 도시 이름으로 요청하여 모든 정보 출력하기
import requests
from pprint import pprint
# 문제2. 날씨 데이터 중 다음 조건에 해당하는 값만 딕셔너리 형태로 반환하는 함수를 구성합니다.
# KEY 값이“main” 인 데이터
# KEY 값이 “weather” 인 데이터
# 함수에서 두 데이터를 새로운 dictionary 에 담아서 return 합니다.
def get_weather():
api_key = "APIKEY"
city = "Seoul,KR"
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
# 요구사항에 맞도록 이곳의 코드를 수정합니다.
response = requests.get(url).json()
return response
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
api_key = 'API_KEY'
result = get_weather()
pprint(result)
ex3. 서울의 현재 날씨 중 온도만 출력하기
- 기본적으로 캘빈(K) 온도 반환
- 섭씨 온도 = (캘빈 온도 - 273.15)
import requests
from pprint import pprint
# 문제3. B번에서 얻는 결과를 활용하여, KEY 값들을 한글로 변경한 딕셔너리를 반환하도록 구성합니다.
# KEY 에 해당하는 한글 KEY 값들은 다음과 같습니다.
# feels_like : '체감온도',
# humidity : '습도',
# pressure : '기압',
# temp : '온도',
# temp_max : '최고온도',
# temp_min : '최저온도',
# description : '요약',
# icon : '아이콘',
# main : '핵심’
# id : ‘식별자’
def get_weather():
api_key = "APIKEY"
city = "Seoul,KR"
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
# 요구사항에 맞도록 이곳의 코드를 수정합니다.
response = requests.get(url).json()
k_temp = response['main']['temp']
c_temp = k_temp - 273.15
print(f'캘빈 온도: {k_temp}K\n섭씨 온도: {c_temp:.2f}°C')
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
result = get_weather()
[실행 결과]
캘빈 온도: 269.91K
섭씨 온도: -3.24°C
ex4. 서울의 현재 날씨에 대한 설명(description) 데이터만 출력하기
import requests
from pprint import pprint
# 문제4. C번의 데이터를 활용하여, 섭씨 온도 데이터를 추가합니다.
def get_weather():
api_key = "APIKEY"
city = "Seoul,KR"
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
# 요구사항에 맞도록 이곳의 코드를 수정합니다.
response = requests.get(url).json()
description = response['weather'][0]['description']
res = '날씨 설명: ' + description
return res
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
result = get_weather()
pprint(result)
[실행 결과]
'날씨 설명: clear sky'
[Project] 파이썬을 이용한 API 데이터 수집
A. 데이터 추출- Key 값 출력하기
전체 정기예금의 응답을 json 형태로 변환 후 Key값만 출력하도록 구성
import pprint
import requests
# 전체 정기예금의 응답을 json 형태로 변환하여 key 값만 출력하시오.
# 공식문서의 요청변수와 예제 요청결과(JSON) 부분을 참고합니다.
# [힌트] 아래와 같은 순서로 데이터를 출력하며 진행합니다.
# 1. 응답을 json 형식으로 변환합니다.
# 2. key 값이 "result" 인 데이터에 모든 정보가 담겨 있습니다.
# 3. key 값이 "result" 인 데이터의 key 값만 출력합니다.
def get_deposit_products():
api_key = "API KEY"
url = 'http://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json'
params = {
'auth': api_key,
'topFinGrpNo': '020000',
'pageNo': 1
}
# 응답을 json 형태로 변환
response = requests.get(url, params = params).json()
ret = response['result'].keys()
return ret
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
# json 형태의 데이터 반환
result = get_deposit_products()
# prrint.prrint(): json 을 보기 좋은 형식으로 출력
pprint.pprint(result)
B. 데이터 추출- 전체 정기예금 상품 리스트
응답 중 정기예금 상품 리스트 정보만 출력하도록 구성
import pprint
import requests
# 전체 정기예금 상품 리스트를 출력하시오.
# 공식문서의 요청변수와 예제 요청결과(JSON) 부분을 참고합니다.
# [힌트] 아래와 같은 순서로 데이터를 출력하며 진행합니다.
# 1. 응답을 json 형식으로 변환합니다.
# 2. key 값이 "result" 인 데이터를 출력합니다.
# 3. 위의 결과 중 key 값이 "baseList" 인 데이터를 출력합니다.
def get_deposit_products():
api_key = "API KEY"
url = 'http://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json'
params = {
'auth': api_key,
'topFinGrpNo': '020000',
'pageNo': 1
}
# 응답을 json 형태로 변환
response = requests.get(url, params = params).json()
ret = response['result']['baseList']
return ret
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
# json 형태의 데이터 반환
result = get_deposit_products()
# prrint.prrint(): json 을 보기 좋은 형식으로 출력
pprint.pprint(result)
C. 데이터 가공- 전체 정기예금 옵션 리스트
응답 중 정기예금 상품들의 옵션 리스트를 출력하도록 구성


import pprint
import requests
# 응답 중 정기예금 상품들의 옵션 리스트를 출력하도록 구성합니다.
# 이 때, 원하는 데이터만 추출하여 새로운 리스트를 만들어 반환하는 함수를 작성하시오.
# [힌트] 아래와 같은 순서로 데이터를 출력하며 진행합니다.
# 1. 응답을 json 형식으로 변환합니다.
# 2. key 값이 "result" 인 데이터를 출력합니다.
# 3. 위의 결과 중 key 값이 "optionList" 인 데이터를 변수에 저장합니다.
# 4. 3번에서 저장된 값을 반복하며, 원하는 데이터만 추출 및 가공하여 결과 리스트에 저장합니다.
def get_deposit_products():
api_key = "API KEY"
url = 'http://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json'
params = {
'auth': api_key,
'topFinGrpNo': '020000',
'pageNo': 1
}
# 응답을 json 형태로 변환
response = requests.get(url, params = params).json()
option_data = response['result']['optionList']
#di = {}
option_list = []
for data in option_data:
di = {}
di['금융상품 코드'] = data['fin_prdt_cd']
di['저축 금리'] = data['intr_rate']
di['저축 기간'] = data['save_trm']
di['저축 금리 유형'] = data['intr_rate_type']
di['저축 금리 유형명'] = data['intr_rate_type_nm']
di['최고 우대금리'] = data['intr_rate2']
option_list.append(di)
print(option_list)
# 아래 코드는 수정하지 않습니다.
if __name__ == '__main__':
# json 형태의 데이터 반환
result = get_deposit_products()
# prrint.prrint(): json 을 보기 좋은 형식으로 출력
pprint.pprint(result)
[출력 예시]

D. 데이터 가공- 새로운 값을 만들어 반환하기
import pprint
import requests
# 상품과 옵션 정보들을 담고 있는 새로운 객체를 만들어 반환하시오.
# [힌트] 상품 리스트와 옵션 리스트를 금융상품 코드를 기준으로 매칭할 수 있습니다.
# [힌트] 아래와 같은 순서로 데이터를 출력하며 진행합니다.
# 1. 응답을 json 형식으로 변환합니다.
# 2. key 값이 "result" 인 데이터를 변수에 저장합니다.
# 3. 2번의 결과 중 key 값이 "baseList" 인 데이터를 변수에 저장합니다.
# 4. 2번의 결과 중 key 값이 "optionList" 인 데이터를 변수에 저장합니다.
# 5. 3번에서 저장된 변수를 순회하며, 4번에서 저장된 값들에서 금융 상품 코드가
# 같은 모든 데이터들을 가져와 새로운 딕셔너리로 저장합니다.
# 저장 시, 명세서에 맞게 출력되도록 저장합니다.
# 6. 5번에서 만든 딕셔너리를 결과 리스트에 추가합니다.
def get_deposit_products():
api_key = "API KEY"
url = 'http://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json'
params = {
'auth': api_key,
'topFinGrpNo': '020000',
'pageNo': 1
}
# 응답을 json 형태로 변환
response = requests.get(url, params = params).json()
base_data = response['result']['baseList']
option_data = response['result']['optionList']
# base_data를 순회하며 option_data의 금융상품코드가 같은 데이터를
# 모두 가져와 새로운 딕셔너리로 저장
print(type(base_data))
res_list = []
res_data = []
for data_b in base_data:
res_di = {}
for data_o in option_data:
if(data_b['fin_prdt_cd'] == data_o['fin_prdt_cd']):
di = {}
di['저축 금리 유형'] = data_o['intr_rate_type']
di['저축 금리 유형명'] = data_o['intr_rate_type_nm']
di['저축 기간'] = data_o['save_trm']
di['저축 금리'] = data_o['intr_rate']
di['최고 우대금리'] = data_o['intr_rate2']
res_data.append(di)
res_di['금리 정보'] = res_data
res_di['금융 상품명'] = data_b['fin_prdt_nm']
res_di['금융회사 명'] = data_b['kor_co_nm']
res_list.append(res_di)
print(res_list)
if __name__ == '__main__':
# json 형태의 데이터 반환
result = get_deposit_products()
# prrint.prrint(): json 을 보기 좋은 형식으로 출력
pprint.pprint(result)
[출력 예시]

+ 참고
유효성 검사
https://jsonlint.com/
JSON Viewer
https://jsonviewer.stack.hu/
JSON Viewer를 통해 구조를 파악하도록 하자..!

'IVS > Python 프로그래밍' 카테고리의 다른 글
[Python] Project-2) 파이썬과 Pandas를 사용한 데이터 처리 (3) | 2024.12.20 |
---|---|
[Python] Class, 상속, 오버라이딩 (1) | 2024.12.20 |
[JSON] Encoding/ Decoding, JSON 파일 파싱하기 (0) | 2024.12.18 |
[JSON] 기본 문법 (2) | 2024.12.18 |
[Python] 리스트, 함수, 딕셔너리, 튜플 (0) | 2024.12.17 |