api key 통합

master
jaehwang 2025-08-19 16:11:40 +09:00
parent b1f8061811
commit 050d0631bb
3 changed files with 43 additions and 78 deletions

View File

@ -28,20 +28,14 @@ pip install -r requirements.txt
1. `.env` 파일에 API 키 설정: 1. `.env` 파일에 API 키 설정:
``` ```
# OpenAI API 키 # OpenAI API 키
OPENAI_API_KEY=your-actual-api-key OPENAI_API_KEY=your-openai-api-key
# 공공데이터 API 키 (국토교통부) # 공공데이터 API 키 (국토교통부)
APT_TRADE_API_KEY=your-key # 아파트 매매 PUBLIC_DATA_API_KEY=your-public-data-api-key
APT_RENT_API_KEY=your-key # 아파트 전월세
OFFI_TRADE_API_KEY=your-key # 오피스텔 매매
OFFI_RENT_API_KEY=your-key # 오피스텔 전월세
SH_TRADE_API_KEY=your-key # 연립/다세대 매매
SH_RENT_API_KEY=your-key # 연립/다세대 전월세
HOUSE_TRADE_API_KEY=your-key # 단독/다가구 매매
HOUSE_RENT_API_KEY=your-key # 단독/다가구 전월세
``` ```
2. 공공데이터포털(data.go.kr)에서 각 API 서비스키 발급 2. 공공데이터포털(data.go.kr)에서 국토교통부 실거래가 API 서비스키 발급
- 하나의 키로 모든 부동산 API 사용 가능
## 실행 ## 실행

View File

@ -14,72 +14,30 @@ class PublicDataAPIClient:
"""API 키 및 기본 설정 초기화""" """API 키 및 기본 설정 초기화"""
self.base_url = "http://apis.data.go.kr/1613000" self.base_url = "http://apis.data.go.kr/1613000"
# 통합 API 키
self.api_key = os.getenv("PUBLIC_DATA_API_KEY")
# API 엔드포인트 매핑 # API 엔드포인트 매핑
self.endpoints = { self.endpoints = {
# 아파트 # 아파트
("아파트", "매매"): { ("아파트", "매매"): f"{self.base_url}/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade",
"url": f"{self.base_url}/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade", ("아파트", "전세"): f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent",
"key": os.getenv("APT_TRADE_API_KEY") ("아파트", "월세"): f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent",
},
("아파트", "전세"): {
"url": f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent",
"key": os.getenv("APT_RENT_API_KEY")
},
("아파트", "월세"): {
"url": f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent",
"key": os.getenv("APT_RENT_API_KEY")
},
# 오피스텔 # 오피스텔
("오피스텔", "매매"): { ("오피스텔", "매매"): f"{self.base_url}/RTMSDataSvcOffiTrade/getRTMSDataSvcOffiTrade",
"url": f"{self.base_url}/RTMSDataSvcOffiTrade/getRTMSDataSvcOffiTrade", ("오피스텔", "전세"): f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent",
"key": os.getenv("OFFI_TRADE_API_KEY") ("오피스텔", "월세"): f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent",
},
("오피스텔", "전세"): {
"url": f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent",
"key": os.getenv("OFFI_RENT_API_KEY")
},
("오피스텔", "월세"): {
"url": f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent",
"key": os.getenv("OFFI_RENT_API_KEY")
},
# 빌라/연립 # 빌라/연립
("빌라", "매매"): { ("빌라", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade",
"url": f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", ("빌라", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"key": os.getenv("SH_TRADE_API_KEY") ("빌라", "월세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
}, ("연립주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade",
("빌라", "전세"): { ("연립주택", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"key": os.getenv("SH_RENT_API_KEY")
},
("빌라", "월세"): {
"url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"key": os.getenv("SH_RENT_API_KEY")
},
("연립주택", "매매"): {
"url": f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade",
"key": os.getenv("SH_TRADE_API_KEY")
},
("연립주택", "전세"): {
"url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"key": os.getenv("SH_RENT_API_KEY")
},
# 주택 # 주택
("주택", "매매"): { ("주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade",
"url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade", ("주택", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent",
"key": os.getenv("HOUSE_TRADE_API_KEY") ("단독주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade",
}, ("다가구주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade"
("주택", "전세"): {
"url": f"{self.base_url}/RTMSDataSvcSHHouseRent/getRTMSDataSvcSHHouseRent",
"key": os.getenv("HOUSE_RENT_API_KEY")
},
("단독주택", "매매"): {
"url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade",
"key": os.getenv("HOUSE_TRADE_API_KEY")
},
("다가구주택", "매매"): {
"url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade",
"key": os.getenv("HOUSE_TRADE_API_KEY")
}
} }
def get_real_estate_data( def get_real_estate_data(
@ -109,21 +67,19 @@ class PublicDataAPIClient:
# 매물 형태 정규화 # 매물 형태 정규화
property_type = self._normalize_property_type(property_type) property_type = self._normalize_property_type(property_type)
transaction_type = self._normalize_transaction_type(transaction_type) transaction_type = self._normalize_transaction_type(transaction_type)
print(property_type)
print(transaction_type)
# 엔드포인트 찾기 # 엔드포인트 찾기
endpoint_info = self.endpoints.get((property_type, transaction_type)) endpoint_url = self.endpoints.get((property_type, transaction_type))
if not endpoint_info: if not endpoint_url:
return [] return []
if not endpoint_info["key"] or endpoint_info["key"] == "your-api-key-here": if not self.api_key or self.api_key == "your-public-data-api-key-here":
print(f"Warning: API key not configured for {property_type} {transaction_type}") print(f"Warning: PUBLIC_DATA_API_KEY not configured")
return [] return []
# API 호출 # API 호출
params = { params = {
"serviceKey": endpoint_info["key"], "serviceKey": self.api_key,
"LAWD_CD": region_code, "LAWD_CD": region_code,
"DEAL_YMD": deal_ymd, "DEAL_YMD": deal_ymd,
"pageNo": 1, "pageNo": 1,
@ -131,7 +87,7 @@ class PublicDataAPIClient:
} }
try: try:
response = requests.get(endpoint_info["url"], params=params, timeout=10) response = requests.get(endpoint_url, params=params, timeout=10)
response.raise_for_status() response.raise_for_status()
# XML 파싱 # XML 파싱

View File

@ -47,6 +47,21 @@
- docs/project_plan.md 업데이트 (API 가이드 문서 추가) - docs/project_plan.md 업데이트 (API 가이드 문서 추가)
- 웹 검색 및 브라우저를 통한 실제 API 정보 수집 - 웹 검색 및 브라우저를 통한 실제 API 정보 수집
[2025-08-19 15:51:03] 공공데이터 API 키 통합 작업 완료
- .env 파일 수정
- 8개의 개별 API 키를 PUBLIC_DATA_API_KEY 하나로 통합
- 공공데이터포털 서비스키는 모든 API에서 공통 사용 가능
- backend/public_data_api.py 수정
- 통합 API 키 사용하도록 변경
- endpoints 구조 단순화 (URL만 저장)
- 불필요한 print 문 제거
- README.md 업데이트
- API 키 설정 방법 간소화
- 하나의 키로 모든 부동산 API 사용 가능함을 명시
[2025-08-19 15:46:53] 공공데이터 API 키 통합 작업 시작
- 여러 개의 API 키를 하나로 통일
[2025-08-19 15:22:10] OpenAI 기반 매물 필터링 기능 추가 완료 [2025-08-19 15:22:10] OpenAI 기반 매물 필터링 기능 추가 완료
- backend/openai_parser.py 수정 - backend/openai_parser.py 수정
- filter_listings 메서드 추가 - filter_listings 메서드 추가