import requests # HTTP 요청을 보내기 위한 라이브러리 불러오기
url = "https://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json" # 금융감독원 예금상품 API 주소
auth_key = "인증키" # 본인의 인증키 (공공데이터 포털 등에서 발급받아야 함)
page = 1 # 첫 페이지부터 시작
all_base_list = [] # 모든 상품 기본정보를 저장할 리스트
all_option_list = [] # 금리 정보(옵션 리스트)를 저장할 리스트
📌 2. 전체 페이지 순회하며 데이터 수집
while True: # 페이지를 계속 반복하며 조회
params = {
"auth": auth_key,
"topFinGrpNo": "030300", # 030300은 저축은행 그룹 코드
"pageNo": str(page) # 현재 페이지 번호를 문자열로 전달
}
response = requests.get(url, params=params) # API 요청 보내기
if response.status_code != 200: # 응답이 실패한 경우
print(f"❌ 요청 실패 (page {page}):", response.status_code)
break # 루프 종료
data = response.json() # 응답을 JSON 형태로 파싱
result = data.get("result", {}) # result 키 안에 필요한 데이터가 들어있음
base_list = result.get("baseList", []) # 상품 기본 정보 리스트
option_list = result.get("optionList", []) # 상품 금리 옵션 리스트
if not base_list: # baseList가 비어있으면 더 이상 페이지 없음
break
all_base_list.extend(base_list) # 지금 페이지의 baseList를 전체 리스트에 추가
all_option_list.extend(option_list) # optionList도 마찬가지로 추가
page += 1 # 다음 페이지로 이동
print(f"\n✅ 모든 페이지 로딩 완료 (총 {page - 1}페이지)\n") # 페이지 로딩 완료 메시지
📌 3. 12개월 상품 필터링 + 중복 제거
filtered = [] # 조건에 맞는 최종 상품들을 저장할 리스트
seen = set() # 중복 제거를 위한 집합 (상품코드, 금리, 우대금리)
for base in all_base_list: # 전체 상품 기본 정보 반복
fin_prdt_cd = base.get("fin_prdt_cd") # 상품 코드
kor_co_nm = base.get("kor_co_nm") # 은행 이름
fin_prdt_nm = base.get("fin_prdt_nm") # 상품 이름
dcls_month = base.get("dcls_month") # 공시 기준 월 (예: 202507)
for opt in all_option_list: # 전체 금리 옵션 정보 반복
if opt.get("fin_prdt_cd") == fin_prdt_cd and opt.get("save_trm") == "12": # 상품코드가 일치하고, 12개월 상품일 경우
rate = opt.get("intr_rate") # 기본금리
rate2 = opt.get("intr_rate2") # 우대금리
key = (fin_prdt_cd, rate, rate2) # 중복 체크를 위한 키 생성
if key in seen: # 이미 처리한 조합이면 무시
continue
seen.add(key) # 처음 보는 조합이면 기록
filtered.append({ # 최종 리스트에 정보 추가
"은행": kor_co_nm,
"상품": fin_prdt_nm,
"기본금리": rate,
"우대금리": rate2,
"공시월": dcls_month
})
📌 4. 기본금리 기준으로 내림차순 정렬
sorted_filtered = sorted(
filtered,
key=lambda x: x["기본금리"] if x["기본금리"] is not None else 0,
reverse=True
)
📌 5. 출력 (상위 30개만)
print("📋 12개월 상품 중 기본금리 상위 30개:")
for i, item in enumerate(sorted_filtered[:30], 1):
print(f"{i:2d}. {item['은행']} - {item['상품']} | 기본금리: {item['기본금리']}%, 우대금리: {item['우대금리']}% | 공시월: {item['공시월']}")